1. ホーム
  2. sorting

[解決済み] Haskellでは、どのように私はペア(タプル)のリストを並べ替えるために組み込みのsortBy関数を使用することができますか?

2022-02-27 23:41:02

質問

Haskellの初心者なので、ご容赦ください。(昨日から勉強を始めたばかりです!) タプルのリストを、主に第1成分(最大から最小)で、第2成分(最小から最大)でソートするにはどうすればよいでしょうか?入出力のサンプルは以下の通りです。

[(1, "b"), (1, "a"), (2, "b"), (2, "a")] (入力)

[(1, "a"), (2, "a"), (1, "b"), (2, "b")] (中段)

[(2, "a"), (2, "b"), (1, "a"), (1, "b")] (出力)

下記を使用してみましたが、間違った出力が得られました。

sortGT a b = GT

sortBy sortGT lst

を使えば、きっとできるはず。 sortBy だけなのですが、自分では解りません。何か手助けがあれば、とてもありがたいです

解決方法は?

関数を作成する必要があります。 sortGT というように、ペアを比較することができます。

sortGT (a1, b1) (a2, b2)
  | a1 < a2 = GT
  | a1 > a2 = LT
  | a1 == a2 = compare b1 b2


これを使うと、以下のような結果が得られます(ghciを使用しました)。

*Main Data.List> sortBy sortGT [(1, "b"), (1, "a"), (2, "b"), (2, "a")]
[(2,"a"),(2,"b"),(1,"a"),(1,"b")]