按ruby中数组的元素属性排序

时间:2011-02-20 20:40:57

标签: ruby arrays sorting

我有一个从自定义类创建的对象数组。自定义类有一些属性,我想通过其中一个属性对数组进行排序?有没有一种简单的方法可以在ruby上实现它,或者我应该从头开始编写它?

示例:

class Example
  attr_accessor :id, :number

  def initialize(iid,no)
    @id = iid
    @number = no
  end
end

exarray = []
1000.times do |n|
  exarray[n] = Example.new(n,n+5)
end

在这里,我想通过其元素number属性对exarray进行排序。

3 个答案:

答案 0 :(得分:14)

sort_by可能是最短的选项

exarray.sort_by {|x| x.number}

这也有效

exarray.sort_by &:number

答案 1 :(得分:2)

如果您希望将此逻辑封装在类中,请在类上实现<=>方法,您可以告诉Ruby如何比较此类型的对象。这是一个基本的例子:

class Example
  include Comparable  # optional, but might as well
  def <=>(other)
    this.number <=> other.number
  end
end

现在您可以致电exarray.sort,它将“正常工作。”


进一步阅读:

答案 2 :(得分:0)

尝试:

exarray.sort { |a, b| a.number <=> b.number }