加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

arrays – 对象数组中的最大值

发布时间:2020-12-17 02:49:30 所属栏目:百科 来源:网络整理
导读:我是ruby的新手.我正在尝试做以下但没有成功. 我有一个对象数组,我们称之为objs.每个对象都有多个属性,其中一个属性是一个包含数字的变量,我们称之为val1.我想迭代对象数组并确定val1通过所有对象的最大值. 我尝试过以下方法: def init(objs) @objs = objs
我是ruby的新手.我正在尝试做以下但没有成功.

我有一个对象数组,我们称之为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

正如我所说,我只是在学习块.

任何建议都是受欢迎的.

谢谢

解决方法

假设您已设置以下模型:

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',26)
john   = SomeObject.new('John',33)

#define an array of the above objects
array = [david,steven,john]

然后通过将条件传递到其块中来使用max_by,如下所示,以确定具有max val1值的对象.最后调用val1来获取max对象的值.

array.max_by {|e| e.val1 }.val1 #=> 33

您也可以考虑使用哈希(无需定义新类),如下所示:

david  = {f_name: 'David',s_name: 'Peters',age: 23}
steven = {f_name: 'Steven',age: 26}
john   = {f_name: 'John',age: 33}

array = [david,john]
array.max_by { |hash| hash[:age] }[:age] #=> 33

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读