【问题标题】:Find max value in a class in ruby在ruby中找到一个类中的最大值
【发布时间】:2013-10-14 04:09:36
【问题描述】:

我已经尝试了几个小时来完成这项工作。

我有这个代码,我有大约 20 个不同的人,他们有不同的年龄和姓名。

如何让 ruby​​ 搜索所有年龄并将最高年龄显示为整数

我已经搜索了很多,但似乎无法使其工作。我什至试图让它对数字进行排序并打印最后一个年龄,这必须是最高的数字

def initialize(firstname, familyname, age)
  @firstname = firstname
  @familyname = familyname
  @age = age

最好的问候

【问题讨论】:

  • 您需要显示更多代码,包括定义所有人的位置/方式。此外,使用代码块的格式化机制(参见帮助)。

标签: ruby arrays class


【解决方案1】:

如果你有这样的课程:

class Person
  attr_accessor :age
  def initialize(age)
    @age = age
  end
end

还有一个像这样的数组:

people = [Person.new(10), Person.new(20), Person.new(30)]

找出最大年龄

您可以通过Array#map获取年龄:

people.map { |person| person.age }
#=> [10, 20, 30]

# or shorter

people.map(&:age)
#=> [10, 20, 30]

而最大值与Enumerable#max

people.map(&:age).max
#=> 30

寻找最年长的人

或者你可以用Enumerable#max_by找到最年长的人:

oldest = people.max_by { |person| person.age }
#=> #<Person:0x007fef4991d0a8 @age=30>

# or shorter

oldest = people.max_by(&:age)
#=> #<Person:0x007fef4991d0a8 @age=30>

和他或她的年龄:

oldest.age
#=> 30

【讨论】:

  • 可爱的答案是...:)
  • max_by 也可以使用方便的 & 符号; people.max_by(&amp;:age)
【解决方案2】:

比如说你的班级是这样的:

class Person
  attr_reader :firstname, :familyname, :age

  def initialize(firstname, familyname, age)
    @firstname = firstname
    @familyname = familyname
    @age = age
  end
end

假设您有一个名为people 的对象数组。然后你可以这样做:

puts people.max_by { |p| p.age }.age

【讨论】:

    【解决方案3】:

    使用max

    例如

    class C
      attr_accessor :age
      def initialize(age)
        @age = age
      end
    end
    
    a,b,c,d = C.new(10), C.new(2), C.new(22), C.new(15)
    
    [a,b,c,d].map(&:age).max #=> 22   
    [a.age,b.age,c.age,d.age].max #=> 22
    

    【讨论】:

      【解决方案4】:

      使用How to get class instances in Ruby? 中显示的技术之一将所有实例收集到一个数组中后,您可以使用Finding the element of a Ruby array with the maximum value for a particular attribute 中显示的技术来查找最大年龄。例如,如果 Foo 是您的班级,age 是您班级的属性,则以下内容应该有效:

      ObjectSpace.each_object.select{|foo| obj.class == Foo}.max_by {|foo| foo.age}
      

      【讨论】:

        猜你喜欢
        • 2016-04-24
        • 1970-01-01
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        相关资源
        最近更新 更多