Haskell Language
Containers - Data.Map
Zoeken…
Constructing
We kunnen een kaart maken van een lijst met tupels zoals deze:
Map.fromList [("Alex", 31), ("Bob", 22)]
Een kaart kan ook worden gebouwd met een enkele waarde:
> Map.singleton "Alex" 31 fromList [("Alex",31)]
Er is ook de empty
functie.
empty :: Map k a
Data.Map ondersteunt ook typische setbewerkingen zoals union
, difference
en intersection
.
Controleren als leeg
We gebruiken de null
functie om te controleren of een bepaalde kaart leeg is:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)] False > Map.null $ Map.empty True
Waarden vinden
Er zijn veel zoekbewerkingen op kaarten.
member :: Ord k => k -> Map ka -> Bool
levert True
als de sleutel van type k
in Map ka
:
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember
is vergelijkbaar:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
U kunt ook findWithDefault :: Ord k => a -> k -> Map ka -> a
om een standaardwaarde op te leveren als de sleutel niet aanwezig is:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Elementen invoegen
Elementen invoegen is eenvoudig:
> let m = Map.singleton "Alex" 31 fromList [("Alex",31)] > Map.insert "Bob" 99 m fromList [("Alex",31),("Bob",99)]
Elementen verwijderen
> let m = Map.fromList [("Alex", 31), ("Bob", 99)] fromList [("Alex",31),("Bob",99)] > Map.delete "Bob" m fromList [("Alex",31)]
Module importeren
De Data.Map
module in de containers
verpakking verschaft een Map
structuur die zowel streng en lui implementaties heeft.
Wanneer u Data.Map
, importeert u het meestal gekwalificeerd om botsingen met functies die al in Prelude zijn gedefinieerd te voorkomen:
import qualified Data.Map as Map
Dus we zouden Map
functie-oproepen dan met Map.
voorbereiden Map.
, bijv
Map.empty -- give me an empty Map
Monoid exemplaar
Map kv
biedt een Monoid- instantie met de volgende semantiek:
-
mempty
is de legeMap
, dat wil zeggen dezelfde alsMap.empty
-
m1 <> m2
is de naar links gerichte unie vanm1
enm2
, dwz als er een sleutel aanwezig is in zowelm1
alsm2
, wordt de waarde vanm1
gekozen voorm1 <> m2
. Deze bewerking is ook beschikbaar buiten deMonoid
instantie alsMap.union
.