是否有一个 Haskell 函数接受一个列表并返回该列表中重复/冗余元素的列表?
我知道nub
and nubBy
功能,但它们remove重复项;我想保留这些受骗者并将它们收集在一个列表中。
是否有一个 Haskell 函数接受一个列表并返回该列表中重复/冗余元素的列表?
您可以轻松地自己编写这样的函数。使用带有两个列表参数的辅助函数,第一个参数是要查找重复项的列表;沿着该列表走下去,并在第二个参数中累积受骗者;最后,当第一个参数为空列表时返回后者。
dupes l = dupes' l []
where
dupes' [] ls = ls
dupes' (x:xs) ls
| not (x `elem` ls) && x `elem` xs = dupes' xs (x:ls)
| otherwise = dupes' xs ls
Test:
λ> dupes [1,2,3,3,2,2,3,4]
[3,2]
请注意,渐近时间复杂度与以下一样糟糕nub
,但是:O(n^2)。如果你想要更好的渐近,你需要一个Ord
阶级约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)