假设你已经设定了以下模型:
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