Van-e valamilyen egyszerűbb módszer arra, hogy megtalálja a lista összes elemét, amely megegyezik a max elemmel .
List v = [ 1,2,3,4,5,5 ] def max = v.max() def maxs = v.findAll { it == max }
Köszönöm!
Megjegyzések
Válasz
Hogyan csináltad az egyszerű példához, pontosan hogyan csinálnám. Használhatom a groupBy
t, ha összetettebb objektummal volt dolgom.
List v = [ 1,2,3,4,5,5 ] def max = v.max() def results = v.groupBy {it}.get(max) assert [5,5] == results
Válasz
A kódodban kétszer lépsz át a listádon (egyszer a List.max
és egyszer a List.findAll
módszerhez. Természetesen ez elfogadható, ha csak egy kis listád van. Ha a listád nagyon nagy , csak egyszer kell átélned.
Ha a listád csak primitíveket tartalmaz, akkor elegendő a maximumot és a maximumot egy változóban tárolni, végigmenni a listán és frissíteni mindkét változót :
def list = [1,2,3,4,5,5] def max = null def count = 0 for (int i: list) { if (max == null || i > max) { max = i count = 1 } else if (i == max) { count++ } } println max // 5 println count // 2
Természetesen a fenti kódnak több sora van, mint a tiednek, de nagyon nagy listák esetén gyorsabbnak kell lennie.
Ans wer
Szerintem ez a legkényelmesebb módszer:
def v = [ 1,2,3,4,5,5 ] v = v.groupBy { it }.sort { 0 - it.key }.values() assert [[5,5], [4], [3], [2], [1]] == v
válasz
Kár, hogy Groovy diffucltá teszi számomra, hogy az egész számok listájából elemet találjak vagy ellenőrizzek a
mint
sess.find{it==valuetobefound}
v.findAll { it == v.max() }