Haskell Language
Contenedores - Data.Map
Buscar..
Construyendo
Podemos crear un Mapa a partir de una lista de tuplas como esta:
Map.fromList [("Alex", 31), ("Bob", 22)]
Un mapa también se puede construir con un solo valor:
> Map.singleton "Alex" 31 fromList [("Alex",31)]
También está la función empty
.
empty :: Map k a
Data.Map también admite operaciones de conjuntos típicas como union
, difference
e intersection
.
Comprobando si está vacío
Usamos la función null
para verificar si un mapa dado está vacío:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)] False > Map.null $ Map.empty True
Encontrar valores
Hay muchas operaciones de consulta en los mapas.
member :: Ord k => k -> Map ka -> Bool
produce True
si la clave de tipo k
está en Map ka
:
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember
es similar:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
También puede usar findWithDefault :: Ord k => a -> k -> Map ka -> a
para obtener un valor predeterminado si la clave no está presente:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Insertando Elementos
Insertar elementos es simple:
> let m = Map.singleton "Alex" 31 fromList [("Alex",31)] > Map.insert "Bob" 99 m fromList [("Alex",31),("Bob",99)]
Borrando elementos
> let m = Map.fromList [("Alex", 31), ("Bob", 99)] fromList [("Alex",31),("Bob",99)] > Map.delete "Bob" m fromList [("Alex",31)]
Importando el Módulo
El módulo Data.Map
en el paquete de containers
proporciona una estructura de Map
que tiene implementaciones estrictas y perezosas.
Cuando se usa Data.Map
, generalmente se importa para evitar choques con funciones ya definidas en Prelude:
import qualified Data.Map as Map
Así que nos gustaría a continuación, anteponer Map
función de llamadas con Map.
, p.ej
Map.empty -- give me an empty Map
Instancia de monoide
Map kv
proporciona una instancia de Monoid con la siguiente semántica:
-
mempty
es elMap
vacío, es decir, igual queMap.empty
-
m1 <> m2
es la unión sesgada a la izquierda dem1
ym2
, es decir, si alguna tecla está presente tanto enm1
como enm2
, entonces el valor dem1
se selecciona param1 <> m2
. Esta operación también está disponible fuera de laMonoid
ejemplo comoMap.union
.