2012-10-22 17 views
6

Mam skrót i chcę zwrócić klucz (y) (lub pary klucz/wartość) maksymalnej wartości (s) hasha. Tak więc, jeśli istnieje tylko jeden prawdziwy max, zwróci ten jeden klucz; jeśli jednak istnieje wiele par klucz/wartość o tej samej wartości, zwróci on wszystkie te klucze. Jak mogę to zrobić w Ruby?Ruby - znajdź klucz (y) o największej wartości skrótu

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

Chyba jej to samo pytanie odpowiedział tutaj http://stackoverflow.com/questions/6040494/how-to-find-key-of-the-value value-hash –

+0

Jakie wartości przechowujesz w hashu? Czy zajmujesz się wyłącznie liczbami całkowitymi? –

+0

@yasirhashmi tak, tak samo, z wyjątkiem, że nie chcę zwrócić tylko jednego, chcę zwrócić wiele par k/v, jeśli mają tę samą wartość. – diasks2

Odpowiedz

11

Jeśli chcesz wszystkie pary, chciałbym zrobić coś takiego

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

Dlaczego ===? Myślę, że może nie robić tego, co myślisz. – pguardiario

+1

@pguardiario zły nawyk. Usunąłem to, dziękuję. – oldergod

2

Pojedyncza wkładka:

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"]] 
Powiązane problemy