On Thu, Jun 16, 2011 at 04:17:55PM +0200, Francesco Mazzoli wrote:
> On 16/06/11 15:01, Dmitri O.Kondratiev wrote:
> >Hi,
> >Data.Map has many great functions, yet I could not find the one that
> >allows from one map create another map where keys are values and values
> >are keys of the first one.
> >Something like:
> >transMap:: (Ord k, Ord a) => Map k a -> Map a k
> >
> >Does such function exist?
> >Thanks!
> >
> >
> >
> >_______________________________________________
> >Haskell-Cafe mailing list
> >[email protected]
> >http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> What about something like
> 
> transMap :: (Ord k, Ord a) => Map k a -> Map a k
> transMap = M.fromList . map swap . M.toList
> 
> ?

Or, if you want to keep duplicates,

import qualified Data.Set as S
import Control.Arrow (second)

transMap = M.fromListWith S.union . map (second S.singleton . swap) . M.toList

-Brent

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to