목록에서 max 요소와 동일한 모든 요소를 찾는 더 간단한 방법이 있습니까? .

List v = [ 1,2,3,4,5,5 ] def max = v.max() def maxs = v.findAll { it == max } 

감사합니다!

댓글

  • 인라인 방법 사용 : v.findAll { it == v.max() }
  • @ArturoHerrero가 목록의 각 요소에 대해 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.maxList.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} 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다