ruby sort_by两次

Dan*_*iel 11 ruby

Ruby在Enumerables上有一个sort_by方法.太棒了!所以你可以做点什么

entries.sort_by { |l| l.project.name }
Run Code Online (Sandbox Code Playgroud)

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

bri*_*gge 24

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

entries.sort_by { |l| [l.project.name, l.project.time] }
Run Code Online (Sandbox Code Playgroud)

这将遵循每种类型的自然排序顺序.

  • entries.sort_by {| e | e.project.name,-e.project.time}更有意义. (5认同)

ahl*_*mer 6

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

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

  • 非零?方法在这里有用:sort {| a,b | (a.project.name <=> b.project.name).nonzero?或(a.project.time <=> b.project.time)} (3认同)