我想从列表中取出重复的元素

时间:2014-07-29 23:50:37

标签: list haskell

我们假设我有一个清单:
[1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4] 我想要一个只显示每个数字一次的功能。所以,最后,这个列表看起来像:
[1, 2, 3, 4] 我还没有尝试过任何东西

1 个答案:

答案 0 :(得分:3)

我会建议nub。您的示例还具有在输入中对项目进行排序的特殊属性,这使我想到group,可能后跟一个头。当然,你可以放弃合成,并尝试将它们全部包装成一个函数。

一个例子:

import Data.List (group, nub)

main = do
    print . map head $ group test
    print $ nub test
    printOnce test

printOnce = printOnceHelper []
 where
    printOnceHelper _              [] = return ()
    printOnceHelper alreadyPrinted (current:next)
        | elem current alreadyPrinted = printOnceHelper alreadyPrinted next
        | otherwise                   = do
            print current
            printOnceHelper (current:alreadyPrinted) next

test = [1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4]