【Ruby】複数キーの降順ソート
試合結果から順位表を自動生成する機能を作りました。
とりあえず勝ち点をキーにしてソートすれば順位は出せます。
が、要件の都合上、勝ち点が並んだ場合に順位決定戦が別途あり、その勝敗は勝ち点に影響せず、順位表示だけに影響します。
つまり、
1位 XX大学 勝ち点12
1位 AA大学 勝ち点12
で並んだ時に順位決定戦となり、XX大学が勝利した場合、
1位 XX大学 勝ち点12
2位 AA大学 勝ち点12
と表示したいわけです。
以下のように順位決定戦の勝利として勝ち点+3してもダメですし、
1位 XX大学 勝ち点15
2位 AA大学 勝ち点12
勝ち点だけで順位決定していると1位が2つ並んでしまいます。
1位 XX大学 勝ち点12
1位 AA大学 勝ち点12
ということで順位決定戦用の勝ち点を別途フィールドとして用意し、
順位決定ロジック(ソート実行)の要素に組み込みました。
つまり、「リーグ戦勝ち点」キー と「順位決定戦勝ち点」キーの2つのキーでソートさせました。
rank_infos = team_results.sort_by do |a|
[-a.point, -a.playoff_point]
end
降順ソートの場合はマイナスをつけます。
現行サイトでは(順位決定戦の有無にかかわらず)順位は手入力で運用しているそうなので、ここを順位決定戦の考慮まで入った「自動化」として実装できたのはすごく良かったです。
全然簡単なコードですが、勉強になりました。
<参考>