1

タプルのリスト([[(Int, Custom)]])があり、整数を相互に比較して外側のリストを並べ替えたいと思います。通常の2次元ソートと同じように動作する必要があります。つまり、最初に最初のリストアイテムでソートし、次に2番目のアイテムでソートする必要がありますが、タプル全体ではなく最初の部分を比較します。

一次元のリストの場合、私は使用sortBy (comparing fst)していましたが、それらを別のリストにラップすることで完全に失われました。Customソートが自動的に機能するようにインスタンスを 作成すると、自動的に機能することはわかっていますOrdが、実際には注文できません。

例と期待される結果が必要な場合はコメントしてください。前もって感謝します!

4

1 に答える 1

3

ええと、質問をした直後に、それは脳卒中のように私を襲った:

comparing[(Int, Custom)]Orderingやソートされた部分リスト(順序付け不可)ではなく、順序付け可能な結果を​​返す関数が必要です。

comparing :: Ord a => (b -> a) -> b -> b -> Ordering
comparing = on compare

したがって、私が返さなければならなかったのは、順序付け可能な整数のリスト、つまり、だけmap fstです。全体として:

sortBy (compare `on` map fst)
  :: Ord a => [[(a, b)]] -> [[(a, b)]]
于 2012-12-20T18:53:18.637 に答える