因此,我想使用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]]
答案 0 :(得分:3)
如果您不关心结果内部列表中元素的顺序是否与原始元素的顺序相匹配,则可以在使用map sort
之前使用nub
对它们进行排序。否则,nubBy ((==) `on` sort)
将以每次比较的内部列表排序的额外成本完成工作。
答案 1 :(得分:2)
通过昂贵的二进制操作排序(此处为nubBy)的标准方法是 decorate-process-undecorate idiom(又名Schwartzian transform):
import Data.List
import Data.Function
g xs = map snd . nubBy ((==)`on`fst) $ [ (sort ys,ys) | ys <- xs]