假設你已經設定了以下模型:
class SomeObject
attr_accessor :prop1, :prop2, :val1
def initialize(prop1, prop2, val1)
@prop1 = prop1
@prop2 = prop2
@val1 = val1
end
end
#define your objects from the class above
david = SomeObject.new('David', 'Peters', 23)
steven = SomeObject.new('Steven', 'Peters', 26)
john = SomeObject.new('John', 'Peters', 33)
#define an array of the above objects
array = [david, steven, john]
然後通過使條件到其塊使用max_by
如下來確定與最大val1
val中的對象UE。最後致電val1
以獲取對象的值。
array.max_by {|e| e.val1 }.val1 #=> 33
您也可以考慮使用哈希(否定需要定義一個新類),像這樣:
david = {f_name: 'David', s_name: 'Peters', age: 23}
steven = {f_name: 'Steven', s_name: 'Peters', age: 26}
john = {f_name: 'John', s_name: 'Peters', age: 33}
array = [david, steven, john]
array.max_by { |hash| hash[:age] }[:age] #=> 33
像魅力一樣工作。問題,是否array.max_by {| e | e.val1}返回一個'e'對象?這就是爲什麼我們必須在最後使用.val1來訪問它? array.max_by {| e | e.val1} .val1 – Sebastian
@Sebastian是的,雖然將它描述爲'e'對象是不正確的。 'array.max_by {| e | e.val1}'返回一個_SomeObject_對象。我們在最後調用'val1'方法來確定它的'val1'屬性。例如,如果我們想要第一個名字,我們也可以調用'prop1'。希望這可以幫助。 –
是的,很多。謝謝 – Sebastian