특정 속성에 대한 최대 값을 가진 Ruby 배열의 요소 찾기


85

아마도이 질문에 대한 아주 간단한 대답이있을 것입니다. 그러나 저는 지금 당장 제 삶에서 그것을 알아낼 수 없습니다. 특정 유형의 객체에 대한 루비 배열이 있고 모두 특정 필드가있는 경우 해당 필드에 대해 가장 큰 값을 가진 배열 요소를 어떻게 찾습니까?


답변:



29

도움이 되나요?

my_array.max {|a,b| a.attr <=> b.attr }

(나는 귀하의 필드에 이름이 있다고 가정합니다 attr)


예, 정확히 제가 찾던 것입니다. Array api를 샅샅이 뒤져서 아무것도 찾을 수 없었습니다. Enumberable에 대한 API를 확인하는 것을 잊었습니다. 감사합니다!
Richard Stokes

1
항상 Enumerable API를 확인하십시오. 그것은 당신이 필요한 모든 것을 가지고 부엌 싱크대를!
Sahil Muthoo 2011

2
사용 max_by하기가 더 간단하기 때문에 사용하는 것을 선호 합니다. 블록은 단일 인수 만 취하고 명시 적으로 우주선 ( <=>) 연산자를 사용할 필요가 없습니다 .
David Grayson 2011

@DavidGrayson 정보 주셔서 감사합니다. 나는이 방법의 존재를 몰랐다. 귀하의 의견과 답변에 투표하겠습니다.
p.matsinopoulos 2011

3

배열을 정렬 한 다음 최대, 최소, 두 번째로 큰 값 등을 얻을 수도 있습니다.

array = array.sort_by {|k,v| v}.reverse

puts hash[0]["key"]

2
최소 또는 최대로 이동하는 경우 알고리즘은 O(n). 최소 정렬입니다 O(n log n). 불필요한 성능 손실이 있으므로 필요한 경우가 아니면 사용하지 마십시오.
Jamie

1
진실. 정렬은 최대 값을 얻기위한 과잉입니다. 나는이 경우에 누군가가 등 2 번째로 큰, 3 번째로 큰하고 싶어 추가
Linju
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.