我已经尝试了几个小时来完成这项工作。
我有这个代码,我有大约 20 个不同的人,他们有不同的年龄和名字。
我怎样才能让红宝石搜索所有年龄并将最高年龄显示为整数
我一直在寻找很多,但似乎无法使其工作。我什至试图让它对数字进行排序并打印最后一个年龄,这必须是最高的数字
def initialize(firstname, familyname, age)
@firstname = firstname
@familyname = familyname
@age = age
此致
如果你有这样的课程:
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
例如说你的班级看起来像这样:
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
利用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
将所有实例收集到一个数组中后,使用如何在 Ruby 中获取类实例?,您可以使用查找具有特定属性最大值的 Ruby 数组的元素中所示的技术来查找最大年龄。例如,如果Foo是您的班级并且age是您班级的属性,则以下内容应该有效:
ObjectSpace.each_object.select{|foo| obj.class == Foo}.max_by {|foo| foo.age}