-1

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

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

我怎样才能让红宝石搜索所有年龄并将最高年龄显示为整数

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

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

此致

4

4 回答 4

2

如果你有这样的课程:

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
于 2013-10-07T14:31:52.507 回答
0

例如说你的班级看起来像这样:

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
于 2013-10-07T14:31:40.480 回答
0

利用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
于 2013-10-07T14:31:47.773 回答
0

将所有实例收集到一个数组中后,使用如何在 Ruby 中获取类实例?,您可以使用查找具有特定属性最大值的 Ruby 数组的元素中所示的技术来查找最大年龄。例如,如果Foo是您的班级并且age是您班级的属性,则以下内容应该有效:

ObjectSpace.each_object.select{|foo| obj.class == Foo}.max_by {|foo| foo.age}
于 2013-10-07T14:32:16.940 回答