Ruby在Enumerable上有一个sort_by方法。太棒了!这样你就可以像这样做:
entries.sort_by { |l| l.project.name }
这将按其项目名称对一堆条目进行排序。如何使在具有相同名称的项目内,条目按其时间排序?
Ruby在Enumerable上有一个sort_by方法。太棒了!这样你就可以像这样做:
entries.sort_by { |l| l.project.name }
这将按其项目名称对一堆条目进行排序。如何使在具有相同名称的项目内,条目按其时间排序?
我建议将想要排序的列放入一个数组中。
entries.sort_by { |l| [l.project.name, l.project.time] }
这将尊重每种类型的自然排序顺序。entries.sort do |a, b|
comp = a.project.name <=> b.project.name
comp.zero? ? (a.project.time <=> b.project.time) : comp
end
返回一个数组:
entries.sort_by { |l| [ l.project.name, l.project.time] }
<=>
运算符执行逐个字段的“词法”比较,这正是您所需的。
now = Time.now; entries.sort_by { |e| e.project.name, now - e.project.time }
- James A. Rosen