Data.Map
HaskellのMap
fromList :: Ord k => [(k, a)] -> Map k a
連想配列の初期化
hs -- ↓key ↓value
env :: Map String String
env = fromList [("hoge", "42"), ("piyo", "100")] -- 初期化
リストからMapを作る
リストの中身はkey-valueのタプル
toList :: Map k a -> [(k, a)]
MapをListにする
lookup :: Ord k => k -> Map.Map k a -> Maybe a
連想配列から値を取得
返り値はMaybe
key-valueが存在すれば Just 42
なかったら Nothing
(!) :: Ord k => Map k a -> k -> a
Maybeではなく直撃で値を得る
値がなかったら落ちる
keys :: Map k a -> [k]
keyのリストを得る
elems :: Map k a -> [a]
valueのリストを得る
insert :: Ord k => k -> a -> Map k a -> Map k a
key-valueを追加
hslet env2 = insert "foo" "500" env
print env2
あくまでもimmutableなので、元の連想配列に追加されるわけではない
delete :: Ord k => k -> Map k a -> Map k a
key-valueを削除
hslet env3 = delete "hoge" env
print $ lookup "hoge" env3 -- > Nothing
あくまでもimmutableなので、元の連想配列から削除されるわけではない
map :: (a -> b) -> Map.Map k a -> Map.Map k b
Map版のmap
値の方に操作する
hsprint $ Map.map (++ "1") env
-- > fromList [("hoge","421"),("piyo","1001")]
mapKeys :: Ord k2 => (k1 -> k2) -> Map.Map k1 a -> Map.Map k2 a
mapのkeyに操作する版
hsprint $ Map.mapKeys (++ "1") env
-- > fromList [("hoge1","42"),("piyo1","100")]
更新系
update :: Ord k => (a -> Maybe a) -> k -> Map k a -> Map k aSource
updateWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> Map k a
updateLookupWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)
alter :: Ord k => (Maybe a -> Maybe a) -> k -> Map k a -> Map k a
insertとadjustの違い
簡単な実装例
使い所
関数を実装するときの環境
参考
よんでないけど