【问题标题】:Sorting by an array's elements properties in ruby在 ruby​​ 中按数组的元素属性排序
【发布时间】:2011-06-30 21:35:35
【问题描述】:

我有一个从自定义类创建的对象数组。自定义类有一些属性,我想按这些属性之一对数组进行排序?有没有一种简单的方法可以在 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 进行排序。

【问题讨论】:

    标签: ruby arrays sorting


    【解决方案1】:

    如果你想在类中封装这个逻辑,在你的类上实现一个<=>方法,你可以告诉Ruby如何比较这种类型的对象。这是一个基本示例:

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

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


    进一步阅读:

    【讨论】:

      【解决方案2】:

      sort_by 可能是最短的选择

      exarray.sort_by {|x| x.number}
      

      这也有效

      exarray.sort_by &:number
      

      【讨论】:

        【解决方案3】:

        试试:

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

        【讨论】:

        • 如果可以,请始终使用 sort_by 而不是 sort。你通常可以。
        • @glen mcdonald:稍微解释一下可能会很好。 sort_by 的两个优点是它更短更简洁,并且它包含一个隐式 Schwartzian 变换,以避免为排序中的每个比较计算昂贵的东西。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        相关资源
        最近更新 更多