Ruby在Enumerables上有一个sort_by方法。太棒了!所以你可以做类似ruby sort_by两次
entries.sort_by { |l| l.project.name }
这将按照他们的项目名称排序一堆条目。你怎么能这样做,以便在同名的项目中,条目按时间排序?
Ruby在Enumerables上有一个sort_by方法。太棒了!所以你可以做类似ruby 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
非零?方法可以在这里有所帮助:sort {| a,b | (a.project.name <=> b.project.name).nonzero?或(a.project.time <=> b.project.time)} – 2009-09-18 11:35:21
返回数组:
entries.sort_by { |l| [ l.project.name, l.project.time] }
这个工程,因为<=>
操作上确实阵列场逐场“词汇”比较这是你在找什么。
如果您希望次要排序是最新的排序,请执行以下操作:'now = Time.now; entries.sort_by {| e | e.project.name,now - e.project.time}' – 2009-09-18 13:00:44
entries.sort_by {| e | e.project.name,-e.project.time} 更有意义。 – 2009-09-18 13:32:40
不错Antti,一点都不差! – 2009-09-18 17:19:19