nubBy
したがって、リストのリストからすべての重複を削除するために使用したいと思います。この場合[1,2,3]==[1,3,2]==[2,3,1]
など、すべての要素が別のリストの要素であるかどうかを使用all
しelem
て尋ねる必要があると考えていますが、構文を理解するのに苦労しています。
明確にするために、たとえば
[[1,2],[2,3],[4,5],[2,1],[2,3]]
重複を削除して出力を取得したい
[[1,2],[2,3],[4,5]]
nubBy
したがって、リストのリストからすべての重複を削除するために使用したいと思います。この場合[1,2,3]==[1,3,2]==[2,3,1]
など、すべての要素が別のリストの要素であるかどうかを使用all
しelem
て尋ねる必要があると考えていますが、構文を理解するのに苦労しています。
明確にするために、たとえば
[[1,2],[2,3],[4,5],[2,1],[2,3]]
重複を削除して出力を取得したい
[[1,2],[2,3],[4,5]]
結果の内部リストの要素の順序が元のリストのいずれかと一致することを気にしない場合は、 を使用map sort
する前に を使用して並べ替えることができますnub
。それ以外の場合は、nubBy ((==) `on` sort)
比較ごとに内部リストをソートするという追加のコストでジョブを実行します。
高価な二項演算でソート(ここではnubBy)する標準的な方法は、decorate-process- undecorateイディオム(別名シュワルツ変換)です。
import Data.List
import Data.Function
g xs = map snd . nubBy ((==)`on`fst) $ [ (sort ys,ys) | ys <- xs]