Jawaban:
Ini akan mengembalikan pasangan nilai kunci hash tergantung pada nilai elemen hash:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Saya menemukan cara ini, kembalikan kunci dari nilai maks pertama
hash.key(hash.values.max)
Cara lain bisa jadi sebagai berikut:
hash.each { |k, v| puts k if v == hash.values.max }
Ini berjalan melalui setiap pasangan nilai kunci dan mengembalikan (atau dalam kasus ini menempatkan) kunci di mana nilainya sama dengan maks dari semua nilai. Ini harus mengembalikan lebih dari satu kunci jika ada seri.
Jika Anda ingin mengambil lebih dari satu pasangan nilai kunci berdasarkan urutan (terbesar kedua, terkecil, dll.), Cara yang lebih efisien adalah dengan mengurutkan hash satu kali dan kemudian mendapatkan hasil yang diinginkan.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Kunci dengan nilai terbesar
puts *hash[0][0]
Dapatkan maks dan min
puts *hash[0], *hash[hash.length-1]
Pasangan nilai kunci terbesar ke-2
Hash[*hash[1]]
Untuk mengubah array hash kembali menjadi hash
hash.to_h
Saya melakukan ini hari ini pada masalah yang sama dan berakhir dengan ini:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
Untuk Ruby yang kurang dari 2.3 Anda dapat menggantinya &.last
dengan .try(:last)
Salah satu yang hanya sebagai pengaman jika hash sumber Anda kosong:{}
Ini akan mengembalikan kunci terakhir dari hash yang diurutkan berdasarkan ukuran; Namun, mungkin ada dua kunci dengan nilai yang sama.
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)