ruby sort_by两次

时间:2009-09-18 04:06:09

标签: ruby

Ruby在Enumerables上有一个sort_by方法。太棒了!所以你可以做类似

的事情
entries.sort_by { |l| l.project.name }

这会根据项目名称对一堆条目进行排序。你怎么能这样做,以便在具有相同名称的项目中,条目按时间排序?

3 个答案:

答案 0 :(得分:24)

我建议将要排序的列放入数组中。

entries.sort_by { |l| [l.project.name, l.project.time] }

这将尊重每种类型的自然排序顺序。

答案 1 :(得分:6)

您可以使用常规排序方法来执行此操作。

entries.sort do |a, b|
  comp = a.project.name <=> b.project.name
  comp.zero? ? (a.project.time <=> b.project.time) : comp
end

答案 2 :(得分:3)

返回一个数组:

entries.sort_by { |l| [ l.project.name, l.project.time] }

这是有效的,因为数组上的<=>运算符会进行逐字段“词法”比较,这正是您所需要的。