"", , . nub
, . "" , . 'seen', , 'seen'.
:
removeDuplicate :: (Eq a) => [(a, b)] -> [(a, b)]
removeDuplicate lst = go lst []
where go [] seen = seen
go (x:xs) seen
| any (\(a, _) -> a == fst x) seen = go xs seen
| otherwise = go xs (seen ++ [x])
:
*Main> removeDuplicate [('a', 3),( 'b', 2),('a', 1),('b', 4)]
[('a',3),('b',2)]
foldl
:
removeDuplicate' = foldl (\seen x -> if any (\(a, _) -> a == fst x) seen
then seen
else seen ++ [x]) []
over-kill , sortBy
Data.List
, groupBy
. map()
, :
import Data.List
import Data.Function
removeDuplicate'' :: (Ord a) => [(a, b)] -> [(a, b)]
removeDuplicate'' xs = map head $ groupBy ((==) `on` fst) $ sortBy (compare `on` fst) xs
: , nubBy
, , .
, on
Data.Function
, .