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习惯用法(又名Schwartzian 变换):

import Data.List
import Data.Function

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