Haskell Language
Контейнеры - Data.Map
Поиск…
строительство
Мы можем создать карту из списка кортежей следующим образом:
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
.