Ruby在Enumerables上有一个sort_by方法。太棒了!所以你可以做类似
的事情entries.sort_by { |l| l.project.name }
这会根据项目名称对一堆条目进行排序。你怎么能这样做,以便在具有相同名称的项目中,条目按时间排序?
答案 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] }
这是有效的,因为数组上的<=>
运算符会进行逐字段“词法”比较,这正是您所需要的。