Haskell Language
Contenitori - Data.Map
Ricerca…
Costruire
Possiamo creare una mappa da un elenco di tuple come questo:
Map.fromList [("Alex", 31), ("Bob", 22)]
Una mappa può anche essere costruita con un singolo valore:
> Map.singleton "Alex" 31
fromList [("Alex",31)]
C'è anche la funzione empty .
empty :: Map k a
Data.Map supporta anche operazioni tipiche dell'insieme come union , difference e intersection .
Controllo se vuoto
Usiamo la funzione null per verificare se una determinata mappa è vuota:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)]
False
> Map.null $ Map.empty
True
Trovare i valori
Ci sono molte operazioni di interrogazione sulle mappe.
member :: Ord k => k -> Map ka -> Bool restituisce True se la chiave di tipo k è in Map ka :
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember è simile:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
Puoi anche usare findWithDefault :: Ord k => a -> k -> Map ka -> a per ottenere un valore predefinito se la chiave non è presente:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Inserimento di elementi
Inserire gli elementi è semplice:
> let m = Map.singleton "Alex" 31
fromList [("Alex",31)]
> Map.insert "Bob" 99 m
fromList [("Alex",31),("Bob",99)]
Eliminazione di elementi
> let m = Map.fromList [("Alex", 31), ("Bob", 99)]
fromList [("Alex",31),("Bob",99)]
> Map.delete "Bob" m
fromList [("Alex",31)]
Importazione del modulo
Il modulo Data.Map nel pacchetto containers fornisce una struttura Map implementazioni sia rigorose che lazy.
Quando si utilizza Data.Map , solitamente viene importato qualificato per evitare conflitti con funzioni già definite in Preludio:
import qualified Data.Map as Map
Così avremmo poi anteporre Map chiamate di funzione con Map. , per esempio
Map.empty -- give me an empty Map
Istanza monoide
Map kv fornisce un'istanza Monoid con la seguente semantica:
-
memptyè laMapvuota, cioè la stessa diMap.empty -
m1 <> m2è l'unione a sinistra dim1em2, cioè se è presente un qualsiasi tasto sia inm1che inm2, allora il valore dim1viene scelto perm1 <> m2. Questa operazione è disponibile all'esterno del ancheMonoidistanza comeMap.union.