Skip to Content

映射(Map)

map<K, V> 把键映到值。键唯一,写入即覆盖。按下标或 Get 取值,键集值集都可整体取出。

创建与读写

val m = new map<string, int>(); m.Set("甲", 1); m.Set("乙", 2); m["丙"] = 3; print(m, m.Count); print(m["甲"], m["乙"]); m["甲"] = 10; print(m);
{甲: 1, 乙: 2, 丙: 3} 3 1 2 {甲: 10, 乙: 2, 丙: 3}

Set(键, 值) 与索引器写 m[键] = 值 等价,键已存在时写入覆盖旧值。

键的访问:m[键] 是断言形,缺键为 crash。Get(键) 是 fail 形,缺键 fail KeyNotFound。

查询

print(m.Contains("甲"), m.ContainsValue(3)); print(m.TryAdd("甲", 99), m.TryAdd("丁", 4), m); m.Remove("乙"); print(m);
True True False True {甲: 10, 乙: 2, 丙: 3, 丁: 4} {甲: 10, 丙: 3, 丁: 4}

Contains(键) 查键,ContainsValue 查值。TryAdd(键, 值) 只在键不存在时写入,返回 bool 报告是否写入成功。Remove(键) 删键值对,Clear() 清空。

键集、值集与条目

print(m.Keys(), m.Values()); print(m.Entries());
[甲, 丙, 丁] [10, 3, 4] [(甲, 10), (丙, 3), (丁, 4)]

Keys() 与 Values() 把两边各自拷成列表,只要单边时用它们。Entries() 拷成元组列表 list<(K, V)>,解构与 .Item 成员都可用(见元组)。注意这三个是方法,要带括号调用,Count 依旧是属性。

遍历

for-in 遍历映射产出的是值,要拿键就遍历 Keys():

for v in m { print("值", v); } for k in m.Keys() { print("键", k); }
值 10 值 3 值 4 键 甲 键 丙 键 丁

遍历顺序与插入顺序一致。要成对拿键值,遍历 Entries() 解构元组即可:

for (k, v) in m.Entries() { print(k, v); }
甲 10 丙 3 丁 4

注意

  • 打印形式是花括号:{甲: 10, 丙: 3, 丁: 4}。
  • Merge(other) 把另一个映射的键值并进来,同键以参数侧为准。Cloned() / DeepClone() 拷贝映射。
  • 键的类型需要可判等,值类型无要求。键按默认判等方式取哈希(struct 按值、class 按身份),见判等与哈希。
最后更新于 2026年10月10日