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 pusta Map , tzn. taka sama jak Map.empty
  • m1 <> m2 to lewostronne połączenie m1 i m2 , tj. jeśli dowolny klucz występuje zarówno w m1 i m2 , wówczas wartość z m1 jest wybierana dla m1 <> m2 . Ta operacja jest również dostępna poza instancją Monoid jako Map.union .


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow