说我有以下课程:
class Person
def initialize(name, age)
@name = name
@age = age
end
def get_age
return @age
end
end
我有一组Person
个对象。是否有一种简洁的,类似Ruby的方式来获得最小(或最大)年龄的人?怎么用它来排序呢?
答案 0 :(得分:6)
这样做:
people_array.min_by(&:get_age)
people_array.max_by(&:get_age)
people_array.sort_by(&:get_age)
答案 1 :(得分:2)
您的问题已得到妥善解答,但由于您有兴趣以类似Ruby的方式做事,
我将向您展示一种更好的类似于Ruby的方法来定义您的Person
类。
如果您的班级没有行为(方法等),最简单的方法是使用结构:
Person = Struct.new(:name, :age)
# example of use
person = Person.new("My name", 21)
否则使用attr_reader和参数哈希创建这样的自定义类:
class Person
attr_reader :name, :age
def initialize(args = {})
@name = args[:name]
@age = args[:age]
end
end
# example of use
person = Person.new(:name => "My name", :age => 21)
答案 2 :(得分:1)
假设你有一个名为array
的数组有5个不同的Person实例。
让老人
for person in array
olderperson = person if maxperson.get_age < person.get_age
end
并对它们进行分类
array.sort! { |a,b| a.get_age <=> b.get_age }
答案 3 :(得分:0)
如下所示:
youngest_person = people.select { |p| p.get_age == people.map(&:get_age).min }