Поиск…


строительство

Мы можем создать карту из списка кортежей следующим образом:

Map.fromList [("Alex", 31), ("Bob", 22)]

Карта также может быть построена с одним значением:

> Map.singleton "Alex" 31
fromList [("Alex",31)]

Существует также empty функция.

empty :: Map k a

Data.Map также поддерживает типичные операции с множеством, такие как union , difference и intersection .

Проверка пустого

Мы используем null функцию для проверки, является ли данная Карта пустой:

> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)]
False

> Map.null $ Map.empty
True

Поиск значений

На картах много запросов.

member :: Ord k => k -> Map ka -> Bool дает True если ключ типа k находится в Map ka :

> Map.member "Alex" $ Map.singleton "Alex" 31
True
> Map.member "Jenny" $ Map.empty
False

notMember аналогичен:

> Map.notMember "Alex" $ Map.singleton "Alex" 31
False
> Map.notMember "Jenny" $ Map.empty
True

Вы также можете использовать findWithDefault :: Ord k => a -> k -> Map ka -> a чтобы получить значение по умолчанию, если ключ отсутствует:

Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x'
Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'

Вставка элементов

Вставка элементов проста:

> let m = Map.singleton "Alex" 31
fromList [("Alex",31)]

> Map.insert "Bob" 99 m
fromList [("Alex",31),("Bob",99)]

Удаление элементов

> let m = Map.fromList [("Alex", 31), ("Bob", 99)]
fromList [("Alex",31),("Bob",99)]

> Map.delete "Bob" m
fromList [("Alex",31)]

Импорт модуля

Модуль Data.Map в пакете containers предоставляет структуру Map которая имеет как строгие, так и ленивые реализации.

При использовании Data.Map обычно обычно импортируется, чтобы избежать столкновений с функциями, уже определенными в Prelude:

import qualified Data.Map as Map

Таким образом , мы бы тогда перед именем Map вызовов функций с Map. , например

Map.empty -- give me an empty Map

Экземпляр моноида

Map kv предоставляет экземпляр Monoid со следующей семантикой:

  • mempty - это пустая Map , то есть такая же, как Map.empty
  • m1 <> m2 - левое смещение объединения m1 и m2 , т. е. если какой-либо ключ присутствует как в m1 и m2 , то значение из m1 выбирается для m1 <> m2 . Эта операция также доступна за пределами Monoid , например , как Map.union .


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow