1

nubByしたがって、リストのリストからすべての重複を削除するために使用したいと思います。この場合[1,2,3]==[1,3,2]==[2,3,1]など、すべての要素が別のリストの要素であるかどうかを使用allelemて尋ねる必要があると考えていますが、構文を理解するのに苦労しています。

明確にするために、たとえば

[[1,2],[2,3],[4,5],[2,1],[2,3]]

重複を削除して出力を取得したい

[[1,2],[2,3],[4,5]]
4

2 に答える 2

3

結果の内部リストの要素の順序が元のリストのいずれかと一致することを気にしない場合は、 を使用map sortする前に を使用して並べ替えることができますnub。それ以外の場合は、nubBy ((==) `on` sort)比較ごとに内部リストをソートするという追加のコストでジョブを実行します。

于 2012-11-15T13:28:36.640 に答える
2

高価な二項演算でソート(ここではnubBy)する標準的な方法は、decorate-process- undecorateイディオム(別名シュワルツ変換)です。

import Data.List
import Data.Function

g xs = map snd . nubBy ((==)`on`fst) $ [ (sort ys,ys) | ys <- xs]
于 2012-11-15T13:47:05.087 に答える