有没有更好(和同等)的方法来排序这样的项目?

 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/

10-13 02:12