2011-11-07 94 views
56

對於這個問題可能有一個非常簡單的答案,但我現在無法在我的生活中找出答案。如果我有一個特定類型的對象的紅寶石數組,並且它們都有一個特定的字段,我如何找到該數組中具有該字段最大值的元素?查找具有特定屬性的最大值的Ruby數組的元素

+0

可能重複的[更多簡潔的版本的最大/最小值沒有塊](http://stackoverflow.com/questions/7087717/more-concise-version-of-max-min-without-the-block) –

回答

112
array.max_by do |element| 
    element.field 
end 

或者:

array.max_by(&:field) 
+0

查看Enumerable模塊的文檔以獲取更多有用的方法。 –

24

這有幫助嗎?

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

(我假設你的字段有名稱attr

+0

是的,這正是我正在尋找因爲在淘氣Array api並找不到任何東西,忘記檢查Enumberable的api,謝謝! –

+1

始終檢查Enumerable API。它擁有你需要的一切*和*廚房水槽! –

+2

我更喜歡使用'max_by',因爲它使用更簡單:該塊只需要一個參數,並且不必明確使用太空船('<=>')運算符。 –

0

您也可以排序數組,然後獲得最大值,最小值,第二大值等

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

puts hash[0]["key"] 
+1

如果你只是最小或最大,算法是'O(n)'。排序至少爲'O(n log n)'。除非需要,否則不要使用它,因爲有一些不必要的性能損失。 – Jamie

相關問題