在Ruby中按数组元素属性排序

8

我有一个由自定义类创建的对象数组。这个自定义类有一些属性,我想按照其中一个属性来排序数组。在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

我希望您能将exarray按其元素的number属性进行排序。
3个回答

17

sort_by可能是最简短的选择。

exarray.sort_by {|x| x.number}

这个也可以工作

exarray.sort_by &:number

2

0

尝试:

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

1
如果可以的话,始终使用sort_by而不是sort。而且通常情况下你是可以这样做的。 - glenn mcdonald
1
@glen mcdonald:可以多解释一下。sort_by 的两个优点是它更短更简洁,同时它包含了一个隐式的 Schwartzian 变换来避免在排序中为每个比较计算昂贵的东西。 - mu is too short

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接