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

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

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



답변

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

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


답변

이 방법을 찾았고 첫 번째 최대 값의 키를 반환합니다.

hash.key(hash.values.max)


답변

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

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

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


답변

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

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


답변

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

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


답변

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

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

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

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


답변

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

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)