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 lege Map , dat wil zeggen dezelfde als Map.empty
  • m1 <> m2 is de naar links gerichte unie van m1 en m2 , dwz als er een sleutel aanwezig is in zowel m1 als m2 , wordt de waarde van m1 gekozen voor m1 <> m2 . Deze bewerking is ook beschikbaar buiten de Monoid instantie als Map.union .


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow