完整文档页面(中文翻译)。文末附有来源说明。

阅读英文版

appdevreferencedaml-standard-libraryda-map

DA.Map

Daml 模块 DA.Map 参考文档。

DA.Map

注意:仅 Daml-LF 1.11 及更高版本支持。

本模块导出泛型映射类型 Map k v 及相关函数。建议 qualified import,例如:


import DA.Map (Map)

import DA.Map qualified as M

这样可使用 Map 类型,并以 M.lookupM.insertM.fromList 等形式调用各操作。

Map k v 内部使用类型 k 的内置序。含函数的键不可比较,会导致运行时错误。因此多数 map 操作要求 Ord k 实例。建议仅对能 deriving 自动 Ord 的键类型使用 Map k v


data K = ...

deriving (Eq, Ord)

包括所有非函数类型的内置类型,如 IntTextBool;在 ab 有默认 Ord 时的 (a, b);在 t 有默认 Ord 时的 Optional t[t];在 kv 有默认 Ord 时的 Map k v;在 k 有默认 Ord 时的 Set k

模块概览

稳定(Stable)。 状态:`active` 引入版本:`3.4.9` 移除版本:`-` 警告:`0` 弃用:`0` 弃用自:`-`

函数

fromList

fromList : Ord k => [(k, v)] -> Map k v

由键值对列表创建映射。

fromListWithL

fromListWithL : Ord k => (v -> v -> v) -> [(k, v)] -> Map k v

由键值对列表创建映射,并用合并函数处理重复键。合并函数仅在列表中同一键多次出现时使用:第一个参数为该键的新值,第二个为迄今在该键上累积的值。

示例:

>>> fromListWithL (++) [("A", [1]), ("A", [2]), ("B", [2]), ("B", [1]), ("A", [3])]
fromList [("A", [3, 2, 1]), ("B", [1, 2])]
>>> fromListWithL (++) [] == (empty : Map Text [Int])
True

fromListWithR

fromListWithR : Ord k => (v -> v -> v) -> [(k, v)] -> Map k v

类似 fromListWithL,但合并函数参数顺序对调。示例:

>>> fromListWithR (++) [("A", [1]), ("A", [2]), ("B", [2]), ("B", [1]), ("A", [3])]
fromList [("A", [1, 2, 3]), ("B", [2, 1])]
>>> fromListWithR (++) [] == (empty : Map Text [Int])
True

fromListWith

fromListWith : Ord k => (v -> v -> v) -> [(k, v)] -> Map k v

keys

keys : Map k v -> [k]

返回映射中所有键的列表。键按 k 的内置序排序,与 deriving Ord 时的 Ord k 一致。

>>> keys (fromList [("A", 1), ("C", 3), ("B", 2)])
["A", "B", "C"]

values

values : Map k v -> [v]

返回映射中所有值的列表,顺序与 M.keys 中对应键一致。

>>> values (fromList [("A", 1), ("B", 2)])
[1, 2]

toList

toList : Map k v -> [(k, v)]

将映射转为键值对列表,按 M.keys 的键序排列。

empty

empty : Map k v

空映射。

size

size : Map k v -> Int

映射元素个数。

null

null : Map k v -> Bool

映射是否为空?

lookup

lookup : Ord k => k -> Map k v -> Optional v

按键查找值。

member

member : Ord k => k -> Map k v -> Bool

键是否属于该映射?

filter

filter : Ord k => (v -> Bool) -> Map k v -> Map k v

用谓词过滤 Map:仅保留值满足谓词的条目。

filterWithKey

filterWithKey : Ord k => (k -> v -> Bool) -> Map k v -> Map k v

用谓词过滤 Map:仅保留满足谓词的条目。

delete

delete : Ord k => k -> Map k v -> Map k v

从映射删除键及其值。键不存在时返回原映射。

singleton

singleton : Ord k => k -> v -> Map k v

创建单元素映射。

insert

insert : Ord k => k -> v -> Map k v -> Map k v

插入新键值对。键已存在时用新值替换原值。

insertWith

insertWith : Ord k => (v -> v -> v) -> k -> v -> Map k v -> Map k v

插入新键值对。键已存在时,用函数 f new_value old_value 将新值与旧值合并。

alter

alter : Ord k => (Optional v -> Optional v) -> k -> Map k v -> Map k v

f 更新 m 中键 k 的值,按需插入或删除。f 接收 k 处的值或 None(不存在);f 可返回 Some 新值插入 m(替换旧值),或 None 删除 k 的关联。

由此可得:

alter identity k = identity alter g k . alter f k = alter (g . f) k alter (_ -> Some v) k = insert k v alter (_ -> None) = delete

union

union : Ord k => Map k v -> Map k v -> Map k v

两映射的并集;键冲突时优先第一个映射。

unionWith

unionWith : Ord k => (v -> v -> v) -> Map k v -> Map k v -> Map k v

两映射的并集,用合并函数处理两映射均存在的键。

merge

merge : Ord k => (k -> a -> Optional c) -> (k -> b -> Optional c) -> (k -> a -> b -> Optional c) -> Map k a -> Map k b -> Map k c

合并两映射:分别处理仅出现在第一映射、仅出现在第二映射、以及两映射均出现的键。

孤儿类型类实例

  • instance (Show k, Show v) => Show (Map k v)

  • instance (Ord k, Eq v) => Eq (Map k v)

  • instance (Ord k, Ord v) => Ord (Map k v)

  • instance Ord k => Semigroup (Map k v)

  • instance Ord k => Monoid (Map k v)

  • instance Ord k => Functor (Map k)

  • instance Ord k => Foldable (Map k)

  • instance Ord k => Traversable (Map k)


本文由 CC Privacy Club 根据 Canton Network 官方文档(CC-BY-4.0)整理翻译,仅供学习;实现细节以官方最新版本为准。