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