Prawdopodobnie jest bardzo prosta odpowiedź na to pytanie, ale w tej chwili nie mogę tego rozgryźć. Jeśli mam tablicę ruby określonego typu obiektów i wszystkie mają określone pole, jak znaleźć element tablicy, który ma największą wartość dla tego pola?
85
Odpowiedzi:
array.max_by do |element| element.field end
Lub:
array.max_by(&:field)
źródło
czy to pomaga?
my_array.max {|a,b| a.attr <=> b.attr }
(Zakładam, że twoje pole ma nazwę
attr
)źródło
max_by
ponieważ jest prostszy w użyciu: blok przyjmuje tylko jeden argument i nie musisz jawnie używać<=>
operatora statku kosmicznego ( ).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"]
źródło
O(n)
. Sortowanie odbywa się według minimumO(n log n)
. Nie używaj tego, chyba że musisz, ponieważ występują niepotrzebne straty wydajności.