RubyにはEnumerablesのsort_byメソッドがあります。素晴らしい!だからあなたは何かをすることができますruby sort_by twice
entries.sort_by { |l| l.project.name }
それは、プロジェクト名でエントリの束を並べ替えるでしょう。どのようにして同じ名前のプロジェクト内でエントリを時間順に並べ替えることができますか?
RubyにはEnumerablesのsort_byメソッドがあります。素晴らしい!だからあなたは何かをすることができますruby sort_by twice
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)} –
戻り配列:
entries.sort_by { |l| [ l.project.name, l.project.time] }
アレイ上<=>
オペレータはあなたが探しているものであるフィールドごとの「字句」の比較を行うので、これは動作します。
セカンダリソートを最も新しいものにしたい場合、これを実行します: 'now = Time.now; entries.sort_by {| e | e.project.name、now - e.project.time} ' –
entries.sort_by {| e | e.project.name、-e.project.time} が理にかなっています。 –
悪くないAntti、全く悪くない! –