Data.Map
HaskellのMap
fromList :: Ord k => [(k, a)] -> Map k a
連想配列の初期化
code:hs
-- ↓key ↓value
env :: Map String String
リストからMapを作る
リストの中身はkey-valueのタプル
toList :: Map k a -> [(k, a)]
MapをListにする
lookup :: Ord k => k -> Map.Map k a -> Maybe a
連想配列から値を取得
code:hs
Map.lookup "hoge" env
返り値は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を追加
code:hs
let env2 = insert "foo" "500" env
print env2
あくまでもimmutableなので、元の連想配列に追加されるわけではない
delete :: Ord k => k -> Map k a -> Map k a
key-valueを削除
code:hs
let env3 = delete "hoge" env
print $ lookup "hoge" env3 -- > Nothing
あくまでもimmutableなので、元の連想配列から削除されるわけではない
map :: (a -> b) -> Map.Map k a -> Map.Map k b
Map版のmap
値の方に操作する
code:hs
print $ Map.map (++ "1") env
mapKeys :: Ord k2 => (k1 -> k2) -> Map.Map k1 a -> Map.Map k2 a
mapのkeyに操作する版
code:hs
print $ Map.mapKeys (++ "1") env
更新系
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の違い
簡単な実装例
使い所
関数を実装するときの環境
参考
よんでないけど