Haskell Language
Behälter - Data.Map
Suche…
Konstruieren
Wir können eine Map aus einer Liste von Tupeln wie folgt erstellen:
Map.fromList [("Alex", 31), ("Bob", 22)]
Eine Map kann auch mit einem einzigen Wert erstellt werden:
> Map.singleton "Alex" 31 fromList [("Alex",31)]
Es gibt auch die empty
Funktion.
empty :: Map k a
Data.Map unterstützt auch typische Mengenoperationen wie union
, difference
und intersection
.
Überprüfen, ob leer
Wir verwenden die null
, um zu überprüfen, ob eine bestimmte Map leer ist:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)] False > Map.null $ Map.empty True
Werte finden
Es gibt viele Abfrageoperationen auf Karten.
member :: Ord k => k -> Map ka -> Bool
ergibt True
wenn sich der Schlüssel vom Typ k
in Map ka
:
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember
ist ähnlich:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
Sie können auch findWithDefault :: Ord k => a -> k -> Map ka -> a
, um einen Standardwert zu erhalten, wenn der Schlüssel nicht vorhanden ist:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Elemente einfügen
Das Einfügen von Elementen ist einfach:
> let m = Map.singleton "Alex" 31 fromList [("Alex",31)] > Map.insert "Bob" 99 m fromList [("Alex",31),("Bob",99)]
Elemente löschen
> let m = Map.fromList [("Alex", 31), ("Bob", 99)] fromList [("Alex",31),("Bob",99)] > Map.delete "Bob" m fromList [("Alex",31)]
Das Modul importieren
Das Data.Map
Modul im containers
stellt eine Map
Struktur bereit, die sowohl strikte als auch verzögerte Implementierungen enthält.
Wenn Sie Data.Map
, importiert es normalerweise qualifiziert, um Data.Map
mit bereits in Prelude definierten Funktionen zu vermeiden:
import qualified Data.Map as Map
Wir haben also Map
Aufrufe mit Map.
vorangestellt Map.
, z.B
Map.empty -- give me an empty Map
Monoid-Beispiel
Map kv
stellt eine Monoid- Instanz mit folgender Semantik bereit:
-
mempty
ist die leereMap
, dh das gleiche wieMap.empty
-
m1 <> m2
ist die nach links vorgespannte Vereinigung vonm1
undm2
, dh, wenn ein Schlüssel sowohl inm1
als auch inm2
vorliegt, wird der Wert vonm1
fürm1 <> m2
. Diese Operation ist auch außerhalb derMonoid
Instanz alsMap.union
.