2012-10-22 2 views
6

Ich habe einen Hash und möchte den/die Schlüssel (oder Schlüssel/Wertpaar (e)) des Maximalwerts zurückgeben (s) des Hashes. Also, wenn es nur ein wahres Maximum gibt, wird es diesen einen Schlüssel zurückgeben; Wenn es jedoch mehrere Schlüssel/Wert-Paare mit demselben Wert gibt, gibt es alle diese Schlüssel zurück. Wie kann ich das in Ruby erreichen?Ruby - finde den/die Schlüssel des/der größten Werte eines Hashs

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

i seine denke, die gleiche Frage hier beantwortet http://stackoverflow.com/questions/6040494/how-to-find-the-key-des-größten-Wert-Hash –

+0

Welche Art von Werten speichern Sie in Ihrem Hash? Haben Sie nur mit Ganzzahlen zu tun? –

+0

@yasirhashmi ja, das gleiche, außer ich möchte nicht nur eins zurückgeben, ich möchte mehrere k/v-Paare zurückgeben, wenn sie den gleichen Wert haben. – diasks2

Antwort

11

Wenn Sie alle Paare wollen, würde ich etwas tun, wie

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

Warum ===? Ich denke, das könnte nicht tun, was du denkst. – pguardiario

+1

@pguardiario eine schlechte Angewohnheit. Ich habe es entfernt, danke. – oldergod

2

Ein einzelner Liner:

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"]] 
Verwandte Themen