목록에서 max 요소와 동일한 모든 요소를 찾는 더 간단한 방법이 있습니까? .
List v = [ 1,2,3,4,5,5 ] def max = v.max() def maxs = v.findAll { it == max }
감사합니다!
댓글
Answer
간단한 예에서 어떻게했는지는 정확히 내가했던 방법입니다. 좀 더 복잡한 개체를 다룰 때는 groupBy
를 사용할 수 있습니다.
List v = [ 1,2,3,4,5,5 ] def max = v.max() def results = v.groupBy {it}.get(max) assert [5,5] == results
Answer
코드에서 목록을 두 번 (List.max
및 List.findAll
메소드에 대해 한 번). 물론 작은 목록 만있는 경우 허용됩니다. 목록이 매우 큰 경우 , 한 번만 진행해야합니다.
목록에 기본 요소 만 포함 된 경우이 최대 값과 개수를 하나의 변수에 저장하여 목록을 살펴보고 두 변수를 모두 업데이트하는 것으로 충분합니다. :
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
물론 위의 코드는 당신보다 더 많은 줄을 가지고 있지만 매우 큰 목록의 경우 더 빠릅니다.
Ans wer
가장 편리한 방법이라고 생각합니다.
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
답변
Groovy가 정수 목록에서 요소를 찾거나 확인하는 것을 사용하지 않고 비교하는 것이 부끄러운 일입니다.
sess.find(valuetobefound)
보다
sess.find{it==valuetobefound}
v.findAll { it == v.max() }