映射(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日
