Haskell Language
Kontenery - Data.Map
Szukaj…
Konstruowanie
Możemy stworzyć mapę z listy krotek takich jak ta:
Map.fromList [("Alex", 31), ("Bob", 22)]
Mapę można również zbudować z jedną wartością:
> Map.singleton "Alex" 31 fromList [("Alex",31)]
Istnieje również empty
funkcja.
empty :: Map k a
Data.Map obsługuje również zestaw typowych operacji, takich jak union
, difference
i intersection
.
Sprawdzanie, czy jest pusty
Używamy funkcji null
aby sprawdzić, czy dana mapa jest pusta:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)] False > Map.null $ Map.empty True
Znajdowanie wartości
Istnieje wiele operacji zapytań na mapach.
member :: Ord k => k -> Map ka -> Bool
zwraca True
jeśli klucz typu k
znajduje się w Map ka
:
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember
jest podobny:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
Możesz także użyć findWithDefault :: Ord k => a -> k -> Map ka -> a
aby uzyskać wartość domyślną, jeśli klucz nie jest obecny:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Wstawianie elementów
Wstawianie elementów jest proste:
> let m = Map.singleton "Alex" 31 fromList [("Alex",31)] > Map.insert "Bob" 99 m fromList [("Alex",31),("Bob",99)]
Usuwanie elementów
> let m = Map.fromList [("Alex", 31), ("Bob", 99)] fromList [("Alex",31),("Bob",99)] > Map.delete "Bob" m fromList [("Alex",31)]
Importowanie modułu
Moduł Data.Map
w pakiecie containers
zapewnia strukturę Map
, która ma zarówno ścisłe, jak i leniwe implementacje.
Podczas korzystania z Data.Map
zwykle importuje się kwalifikowaną, aby uniknąć kolizji z funkcjami już zdefiniowanymi w Prelude:
import qualified Data.Map as Map
Więc my wtedy poprzedzić Map
wywołań funkcji z Map.
np
Map.empty -- give me an empty Map
Instancja monoidalna
Map kv
zapewnia instancję Monoid z następującą semantyką:
-
mempty
to pustaMap
, tzn. taka sama jakMap.empty
-
m1 <> m2
to lewostronne połączeniem1
im2
, tj. jeśli dowolny klucz występuje zarówno wm1
im2
, wówczas wartość zm1
jest wybierana dlam1 <> m2
. Ta operacja jest również dostępna poza instancjąMonoid
jakoMap.union
.