获取数组值的最优雅方法是什么,最小化某个类属性?

时间:2014-03-07 07:29:37

标签: ruby sorting

说我有以下课程:

class Person
    def initialize(name, age)
        @name = name
        @age = age
    end

    def get_age
        return @age
    end
end

我有一组Person个对象。是否有一种简洁的,类似Ruby的方式来获得最小(或最大)年龄的人?怎么用它来排序呢?

4 个答案:

答案 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 }