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
è laMap
vuota, cioè la stessa diMap.empty
-
m1 <> m2
è l'unione a sinistra dim1
em2
, cioè se è presente un qualsiasi tasto sia inm1
che inm2
, allora il valore dim1
viene scelto perm1 <> m2
. Questa operazione è disponibile all'esterno del ancheMonoid
istanza comeMap.union
.