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 el Map vacío, es decir, igual que Map.empty
  • m1 <> m2 es la unión sesgada a la izquierda de m1 y m2 , es decir, si alguna tecla está presente tanto en m1 como en m2 , entonces el valor de m1 se selecciona para m1 <> m2 . Esta operación también está disponible fuera de la Monoid ejemplo como Map.union .


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow