Odpowiedzi:
To zwróci max hash para klucz-wartość w zależności od wartości elementów hash:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Znalazłem w ten sposób, zwróć klucz pierwszej wartości maksymalnej
hash.key(hash.values.max)
Innym sposobem może być:
hash.each { |k, v| puts k if v == hash.values.max }
Sprawdza każdą parę klucz-wartość i zwraca (lub w tym przypadku umieszcza) klucze, w których wartość jest równa maksymalnej ze wszystkich wartości. To powinno zwrócić więcej niż jeden klucz, jeśli jest remis.
Możesz użyć metody select, jeśli chcesz, aby para klucz-wartość została zwrócona:
hash.select {|k,v| v == hash.values.max }
Jeśli chcesz pobrać więcej niż jedną parę klucz-wartość na podstawie kolejności (druga co do wielkości, najmniejsza itp.), Bardziej wydajnym sposobem będzie jednokrotne posortowanie skrótu, a następnie uzyskanie pożądanych wyników.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Klucz o największej wartości
puts *hash[0][0]
Uzyskaj maks. I min
puts *hash[0], *hash[hash.length-1]
Druga co do wielkości para klucz-wartość
Hash[*hash[1]]
Aby przekonwertować tablicę skrótów z powrotem na skrót
hash.to_h
Zrobiłem to dzisiaj z podobnym problemem i skończyło się na tym:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
W przypadku Rubiego mniejszego niż 2.3 możesz zamienić na
Którykolwiek &.last
z .try(:last)
nich jest tylko zabezpieczeniem, jeśli twój kod źródłowy jest pusty:{}
To zwróci ostatni klucz skrótu posortowany według rozmiaru; jednak mogą istnieć dwa klucze o tej samej wartości.
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)