在rails中对对象的集合进行排序?

时间:2009-11-07 12:33:52

标签: ruby-on-rails ruby object sorting

我知道我可以使用像User.sort {| a,b |这样的东西a.attribute< => b.attribute}或User.find and order,但它是一种类似于Java的类似接口的方式,所以每当我在User对象上调用sort时,它都会对预定义的属性进行排序。

谢谢,

1 个答案:

答案 0 :(得分:4)

您可以通过为对象定义<=>方法来实现。这样,您应该只能说:collection.sort用于非破坏性排序,或collection.sort!用于就地排序:

所以,例如:

class A
   def <=>(other)
      # put sorting logic here
   end
end

更完整的一个:

class A
    attr_accessor :val
    def initialize
       @val = 0
    end

    def <=>(other)
       return @val <=> other.val
    end
end

a = A.new
b = A.new
a.val = 5
b.val = 1
ar = [a,b]
ar.sort!
ar.each do |x|
  puts x.val
end

这将输出15