Answers:
我建议改用sort_by:
objects.sort_by {|obj| obj.attribute}
特别是如果可以计算属性。
或更简洁的方法:
objects.sort_by(&:attribute)
objects.sort_by { |obj| obj.attribute.downcase }
sort!
(例如速度等)相比如何吗?
是的,使用Array#sort!
它很容易。
myarray.sort! { |a, b| a.attribute <=> b.attribute }
<=>
吗?您遇到什么样的错误?等等,等等。换句话说,我们需要比“但对我没有运气”更多的细节。
sort
,如果你想保留原始和分配结果不同的对象; 否则,请使用就地变体sort!
。实际上,在复制原始对象之后,内部sort
调用sort!
。
sort!
可以正常工作,并且始终(!)所做的事情与您编写的内容相同。
您可以通过覆盖<=>方法使任何类可排序:
class Person
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def <=>(other)
@last_name + @first_name <=> other.last_name + other.first_name
end
end
现在,一个Person对象数组可以在last_name上排序。
ar = [Person.new("Eric", "Cunningham"), Person.new("Homer", "Allen")]
puts ar # => [ "Eric Cunningham", "Homer Allen"] (Person objects!)
ar.sort!
puts ar # => [ "Homer Allen", "Eric Cunningham" ]
更优雅的是objects.sort_by(&:attribute)
,.reverse
如果您需要切换订单,可以添加一个。
objects.sort_by(&:attribute)