가장 큰 값 해시의 키를 찾는 방법은 무엇입니까?


110

다음 해시가 있습니다. {"CA"=>2, "MI"=>1, "NY"=>1}

루비를 사용하여 최대 키 값 쌍을 반환하려면 어떻게해야합니까? "CA"를 반환하고 싶습니다.


3
가장 큰 값이 동일한 키가 여러 개 있으면 어떻게됩니까?
Gabe

답변:


230

그러면 해시 요소의 값에 따라 최대 해시 키-값 쌍이 반환됩니다.

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

49
가치 당신은 [키 값]와 2 요소 배열 돌아 지적
justingordon

6
hash.max_by {| k, v | v} [0]은 키를 제공합니다.
nfriend21 2014

4
또한 순위에 따라 동점이 1 위에 올 것입니다.
Robbie Guilfoyle 2015

8
쌍에 대해 hash.max_by (& : last)를 수행하고 키에 대해 hash.max_by (& : last) .first를 수행 할 수도 있습니다.
mahemoff


16

다른 방법은 다음과 같습니다.

hash.each { |k, v| puts k if v == hash.values.max }

이것은 각 키-값 쌍을 통해 실행되고 값이 모든 값의 최대 값과 같은 키를 반환합니다 (또는이 경우에는 넣습니다). 동점 인 경우 둘 이상의 키를 반환해야합니다.


5

키 값 쌍을 반환하려면 select 메서드를 사용할 수 있습니다.

hash.select {|k,v| v == hash.values.max }

4

순서 (두 번째로 큰 것, 가장 작은 것 등)에 따라 둘 이상의 키 값 쌍을 검색하려는 경우 해시를 한 번 정렬 한 다음 원하는 결과를 얻는 것이보다 효율적인 방법입니다.

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end

가장 큰 가치의 열쇠

puts *hash[0][0]

최대 및 최소 얻기

puts *hash[0], *hash[hash.length-1]

두 번째로 큰 키 값 쌍

Hash[*hash[1]]

해시 배열을 다시 해시로 변환하려면

hash.to_h

1

나는 오늘 비슷한 문제에 대해 이것을했고 결국 다음과 같이 끝났습니다.

hash = { "CA"=>2, "MI"=>1, "NY"=>1 }

hash.invert.max&.last
=> "CA" 

2.3 미만의 Ruby의 경우 소스 해시가 비어있는 경우 둘 중 하나를 사용 &.last하여 대체 할 수 있습니다 .try(:last).{}


-3

이것은 크기별로 정렬 된 해시의 마지막 키를 반환합니다. 그러나 동일한 값을 가진 두 개의 키가있을 수 있습니다.

def largest_hash_key(hash)
  key = hash.sort{|a,b| a[1] <=> b[1]}.last
  puts key
end

hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)

2
선택한 답변? may_by는 저수준 정렬보다 훨씬 낫습니다. 정렬 + 마지막보다 더 작고 메모리를 덜 사용합니다.
tokland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.