Haskell语言学习笔记(28)Data.Map

Data.Map

Operators

Prelude Data.Map> fromList [(5,'a'), (3,'b')] ! 5
'a'
Prelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 1 
Nothing
Prelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 5
Just 'a'

Query

Prelude Data.Map> Data.Map.null (singleton 1 'a')
False
Prelude Data.Map> size (fromList([(1,'a'), (2,'c'), (3,'b')])) 
3
Prelude Data.Map> member 5 (fromList [(5,'a'), (3,'b')]) 
True
Prelude Data.Map> Data.Map.lookup "John" (fromList [("John","Sales"), ("Bob","IT")])
Just "Sales"
Prelude Data.Map> findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')])
'x'
Prelude Data.Map> findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')])
'a'

Construction

Prelude Data.Map> singleton 1 'a'
fromList [(1,'a')]
Prelude Data.Map> empty
fromList []

Insertion

Prelude Data.Map> insert 5 'x' (fromList [(5,'a'), (3,'b')])
fromList [(3,'b'),(5,'x')]
Prelude Data.Map> insert 7 'x' (fromList [(5,'a'), (3,'b')])
fromList [(3,'b'),(5,'a'),(7,'x')]
Prelude Data.Map> insert 5 'x' empty
fromList [(5,'x')]

Delete/Update

Prelude Data.Map> delete 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> adjust ("new " ++) 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"new a")]
Prelude Data.Map> let f x = if x == "a" then Just "new a" else Nothing
Prelude Data.Map> update f 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"new a")]
Prelude Data.Map> let f _ = Nothing
Prelude Data.Map> alter f 5 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> let f _ = Just "c"
Prelude Data.Map> alter f 7 (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"a"),(7,"c")]

Combine

Prelude Data.Map> union (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(3,"b"),(5,"a"),(7,"C")]
Prelude Data.Map> unions [(fromList [(5, "a"), (3, "b")]), (fromList [(5, "A"), (7, "C")]), (fromList [(5, "A3"), (3, "B3")])]
fromList [(3,"b"),(5,"a"),(7,"C")]

Difference

Prelude Data.Map> difference (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(3,"b")]

Intersection

Prelude Data.Map> intersection (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")])
fromList [(5,"a")]

Traversal

Prelude Data.Map> Data.Map.map (++ "x") (fromList [(5,"a"), (3,"b")])
fromList [(3,"bx"),(5,"ax")]
Prelude Data.Map> traverseWithKey (\k v -> if odd k then Just (succ v) else Nothing) (fromList [(1, 'a'), (5, 'e')])
Just (fromList [(1,'b'),(5,'f')])
Prelude Data.Map> let f a b = (a ++ b, b ++ "X")
Prelude Data.Map> mapAccum f "Everything: " (fromList [(5,"a"), (3,"b")])
("Everything: ba",fromList [(3,"bX"),(5,"aX")])
Prelude Data.Map> mapKeys (+ 1) (fromList [(5,"a"), (3,"b")])
fromList [(4,"b"),(6,"a")]

Folds

Prelude Data.Map> let f a len = len + (length a)
Prelude Data.Map> Data.Map.foldr f 0 (fromList [(5,"a"), (3,"bbb")])
4
Prelude Data.Map> let f len a = len + (length a)
Prelude Data.Map> Data.Map.foldl f 0 (fromList [(5,"a"), (3,"bbb")])
4

Conversion

Prelude Data.Map> elems (fromList [(5,"a"), (3,"b")])
["b","a"]
Prelude Data.Map> keys (fromList [(5,"a"), (3,"b")])
[3,5]
Prelude Data.Map> assocs (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]

Lists

Prelude Data.Map> toList (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]
Prelude Data.Map> fromList [(5,"a"), (3,"b"), (5, "c")]
fromList [(3,"b"),(5,"c")]
Prelude Data.Map> fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")]
fromList [(3,"ab"),(5,"aba")]

Ordered lists

Prelude Data.Map> toAscList (fromList [(5,"a"), (3,"b")])
[(3,"b"),(5,"a")]
Prelude Data.Map> toDescList (fromList [(5,"a"), (3,"b")])
[(5,"a"),(3,"b")]
Prelude Data.Map> fromAscList [(3,"b"), (5,"a")]
fromList [(3,"b"),(5,"a")]
Prelude Data.Map> fromDescList [(5,"a"), (3,"b")]
fromList [(3,"b"),(5,"a")]

Filter

Prelude Data.Map> Data.Map.filter (> "a") (fromList [(5,"a"), (3,"b")])
fromList [(3,"b")]
Prelude Data.Map> partition (> "a") (fromList [(5,"a"), (3,"b")])
(fromList [(3,"b")],fromList [(5,"a")])
Prelude Data.Map> let f x = if x == "a" then Just "new a" else Nothing
Prelude Data.Map> mapMaybe f (fromList [(5,"a"), (3,"b")]) 
fromList [(5,"new a")]
Prelude Data.Map> split 4 (fromList [(5,"a"), (3,"b")])
(fromList [(3,"b")],fromList [(5,"a")])

Submap

Prelude Data.Map> isSubmapOfBy (==) (fromList [('a',1)]) (fromList [('a',1),('b',2)])
True
Prelude Data.Map> isSubmapOfBy (<=) (fromList [('a',1)]) (fromList [('a',1),('b',2)])
True
Prelude Data.Map> isSubmapOfBy (<)  (fromList [('a',1)]) (fromList [('a',1),('b',2)])
False

Indexed

Prelude Data.Map> lookupIndex 2 (fromList [(5,"a"), (3,"b")])
Nothing
Prelude Data.Map> lookupIndex 3 (fromList [(5,"a"), (3,"b")])
Just 0
Prelude Data.Map> findIndex 3 (fromList [(5,"a"), (3,"b")])
0
Prelude Data.Map> elemAt 0 (fromList [(5,"a"), (3,"b")])
(3,"b")
Prelude Data.Map> elemAt 1 (fromList [(5,"a"), (3,"b")])
(5,"a")
Prelude Data.Map> updateAt (\ _ _ -> Just "x") 0    (fromList [(5,"a"), (3,"b")])
fromList [(3,"x"),(5,"a")]
Prelude Data.Map> deleteAt 0  (fromList [(5,"a"), (3,"b")])
fromList [(5,"a")]

Min/Max

Prelude Data.Map> lookupMin (fromList [(5,"a"), (3,"b")])
Just (3,"b")
Prelude Data.Map> lookupMax (fromList [(5,"a"), (3,"b")])
Just (5,"a")
Prelude Data.Map> findMin (fromList [(5,"a"), (3,"b")])
(3,"b")
Prelude Data.Map> findMax (fromList [(5,"a"), (3,"b")])
(5,"a")
Prelude Data.Map> deleteMin (fromList [(5,"a"), (3,"b"), (7,"c")])
fromList [(5,"a"),(7,"c")]
Prelude Data.Map> updateMax (\ a -> Just ("X" ++ a)) (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"Xa")]

Debugging

Prelude Data.Map> valid (fromAscList [(3,"b"), (5,"a")])
True
Prelude Data.Map> valid (fromAscList [(5,"a"), (3,"b")])
False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值