所以,我想用来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习惯用法(又名Schwartzian 变换):
import Data.List
import Data.Function
g xs = map snd . nubBy ((==)`on`fst) $ [ (sort ys,ys) | ys <- xs]