我是红宝石的新手。我正在尝试执行以下操作,但没有成功。
我有一个对象数组,我们称之为objs。每个对象都有多个属性,其中一个属性是一个包含数字的变量,我们称之为val1。我想迭代对象数组并确定val1通过所有对象的最大值。
我尝试了以下内容:
def init(objs)
@objs = objs
@max = 0
cal_max
end
def cal_max
@max = @objs.find { |obj| obj.val1 >= max }
# also tried
@objs.each { |obj| @max = obj.val1 if obj.val1 >= @max }
end
正如我所说,我只是在学习积木。
欢迎提出任何建议。
由于
答案 0 :(得分:4)
我们假设您已设置以下模型:
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
值的对象。最后调用val1
以获取 max 对象的值。
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
答案 1 :(得分:3)
<h4 contenteditable="true" [contenteditableModel]="person?.name" ...>
这将调用每个对象上的方法,并创建一个新的结果数组,然后找到最大值。这是:
的简写@objs.map(&:val1).max
或者,您可以select the object with the largest value,然后对其进行操作(正如下面Cary Swoveland正确推荐的那样):
@objs.map{ |o| o.val1 }.max