Ruby:有没有更好的方法来编写以下“排序”方法?

时间:2011-01-07 02:30:54

标签: ruby sorting

是否有更好的(和等效的)方法对这样的项目进行排序?

 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

1 个答案:

答案 0 :(得分:3)

您可以转换数组中的对象进行比较

[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!中的任何内容。