检查子列表的所有元素与nubBy的另一个元素相同

时间:2012-11-15 13:22:39

标签: haskell

因此,我想使用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]]

2 个答案:

答案 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]