マップのキーと値を入れ替える
マップのキーと値を入れ替えるには、タプルのリストにして、要素を入れ替えた上でマップに戻します。
タプルの要素を入れ替えるにはData.Tupleのswapを使います。
code: (haskell)
import Data.Tuple (swap)
Map.fromList $ map swap $ Map.toList xs
この方法では重複がある場合、後にある方が優先されます。
code: (haskell)
Map.fromList $ map swap $ Map.toList ys
Setを使って重複する値を扱うには次のようにします。
Setはcontainersパッケージに含まれる、集合を表すコレクションです。
code: (haskell)
import Control.Arrow (second)
import qualified Data.Set as Set
Map.fromListWith Set.union $ map (second Set.singleton . swap) $ Map.toList ys
fromList [("a",fromList 5,7),("b",fromList 3)] ここでControl.Arrowのsecondを使っています。
この関数は、二要素タプルのふたつ目の要素に関数を適用する関数です。
code: (haskell)
second (* 5) ("a", 10)
("a",50)
second odd ("a", 10)
("a",False)
second Set.singleton ("a", 10)