[Haskell-cafe] Efficient functional idiom for histogram
Gregory Collins
greg at gregorycollins.net
Fri Jul 31 16:53:25 EDT 2009
Gregory Collins <greg at gregorycollins.net> writes:
> Paul Moore <p.f.moore at gmail.com> writes:
>
>> How would I efficiently write a function in Haskell to count
>> occurrences of unique elements in a (potentially very large) list? For
>> example, given the list [1,2,3,4,5,3,4,2,4] I would like the output
>> [[1,1], [2,2], [3,2], [4,3], [5,1]] (or some equivalent
>> representation).
>
> import qualified Data.Map as Map
> import Data.Map (Map)
>
> histogram :: Ord a => [a] -> [(a,Int)]
> histogram = Map.assocs . foldl f Map.empty
> where
> f m k = Map.insertWith (+) k 1 m
Here "foldl" should be "foldl'" (d'oh!)
G
--
Gregory Collins <greg at gregorycollins.net>
More information about the Haskell-Cafe
mailing list