Znalezienie elementu tablicy Ruby z maksymalną wartością określonego atrybutu


Odpowiedzi:



29

czy to pomaga?

my_array.max {|a,b| a.attr <=> b.attr }

(Zakładam, że twoje pole ma nazwę attr)


Tak, właśnie tego szukałem, przeszukiwałem interfejs API Array i nie mogłem niczego znaleźć, zapomnij sprawdzić interfejs API dla Enumberable, dzięki!
Richard Stokes

1
Zawsze sprawdzaj Enumerable API. Ma wszystko, czego potrzebujesz i zlew kuchenny!
Sahil Muthoo,

2
Wolę używać, max_byponieważ jest prostszy w użyciu: blok przyjmuje tylko jeden argument i nie musisz jawnie używać <=>operatora statku kosmicznego ( ).
David Grayson

@DavidGrayson Dzięki za informację. Nie wiedziałem o istnieniu tej metody. Zagłosuję za Twoim komentarzem i odpowiedzą.
p.matsinopoulos

3

Możesz również posortować tablicę, a następnie uzyskać maksymalną, minimalną, drugą co do wielkości wartość itp.

array = array.sort_by {|k,v| v}.reverse

puts hash[0]["key"]

2
Jeśli wybierasz minimum lub maksimum, algorytmy są O(n). Sortowanie odbywa się według minimum O(n log n). Nie używaj tego, chyba że musisz, ponieważ występują niepotrzebne straty wydajności.
Jamie

1
Prawdziwe. Sortowanie to przesada, aby uzyskać maks. Dodałem to na wypadek, gdyby ktoś chciał uzyskać drugą co do wielkości, trzecią co do wielkości itp.
Linju
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.