2012-10-22 10 views
6

Bir karmaya sahip karmasının bir büyük değere (ler) in anahtar (lar) bulmak ve maksimum değerin anahtarını (lar) (veya anahtar/değer çiftini (ler)) dönmek istiyorum s). Yani, eğer tek bir gerçek maksimum varsa, o bir anahtara dönecektir; Bununla birlikte, aynı değere sahip birden fazla anahtar/değer çifti varsa, bu anahtarların tümünü geri döndürecektir. Bunu Ruby'de nasıl yapabilirim?Yakut - (

my_hash.max_by {|k,v| v} #only returns one key/value pair 
+0

http://stackoverflow.com/sorular/6040494/how-to-bulmak-tuşlu-of-the-büyük-değer-karma Eğer karma depolamak değerlerin ne tür –

+0

? Sadece tamsayılarla mı çalışıyorsun? –

+0

evet, sadece bir tane dönmek istemiyorum dışında aynı, onlar aynı değere sahip birden çok k/hacim çiftleri dönmek istiyorum @yasirhashmi. Anahtar dizesidir @AmirRubin – diasks2

cevap

11

tüm çiftleri istiyorsanız,

max = my_hash.values.max 
Hash[my_hash.select { |k, v| v == max}] 
+1

Neden ===? Bence düşündüğün şeyi yapamayacağını düşünüyorum. – pguardiario

+1

@pguardiario kötü bir alışkanlıktır. Onu kaldırdım, teşekkürler. – oldergod

2

gibi bir şey tek bir astar yapacağını i onun aynı yanıtı burada tahmin

my_hash.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max 

irb 
> z = {:tree => 3, :two => 2, 'three' => 3} 

> z.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max 
[3, [:tree, "three"]]