有没有更好(和同等)的方法来排序这样的项目?
items.sort! do |p1, p2|
if (p1.foo == p2.foo)
if (p1.bar == p2.bar)
if (p1.moo == p2.moo)
p1.wow <=> p2.wow # Ascending order
else
p2.sam.moo <=> p1.sam.moo # Descending order, 2 levels attribute
end
else
p2.bar <=> p1.bar # Descending order
end
else
p1.foo <=> p2.foo # Ascending order
end
end
最佳答案
可以在数组中打开对象进行比较
[p1.foo, p1.bar, p1.moo, p1.sam.moo] <=> [p2.foo, p2.bar, p2.moo, p2.sam.moo]
数组就像字符串一样进行比较:由第一个不同的元素进行比较。
如果某些比较(
p2.bar <=> p1.bar
)中的反向索引不是一个输入错误,则还需要切换数组元素。或者可以重写类中的比较运算符
def <=>(p2)
...
end
在这种情况下,您不需要在
items.sort!
中传递任何内容。关于ruby - Ruby:有没有更好的方法可以编写以下“sort”方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4622031/