【far 语言】Map 映射

本文是「far 语言」系列文档之一,总目录见《【far 语言】语言文档目录》。

字典 map

Far 的 map 是键值对容器,键仅限 stringlong,JS 风格字面量。

声明

map<string, string> data = {"name": "far"};   // 键值均为字符串
map<string, long> age = {"alice": 30};        // 值类型为 long
map<string, string> m = {};                   // 空 map
  • 泛型强制map 必须带两个泛型参数,裸 map m 报错。
  • 键类型仅限 stringlong,其他类型(如 bool)报错。

key 免引号

m := {name: "far", if: 123};    // 标识符/关键字后紧跟 : 即视为字符串 key
  • {if:123} 不会报错——关键字在 : 前被当作标识符 key 解析。
  • 带引号写法 {"name":"far"} 同样支持。

读写

m.put("key", "value");     // 写入
v := m.get("key");      // 读取
ok := m.hasKey("key");  // 是否存在
println(m.size());         // 元素个数

// 下标读写(key 不存在时 m[k] 返回 0)
m["name"] = "far";
n := m["name"];

遍历

foreach(k in m){           // k 是 key
    println(m[k]);
}

与数组的区别

  • {...} 花括号字面量:无冒号 = 数组{... : ...} = map。
  • {1,2,3} 是数组;{"name":"far"} 是 map;{} 在数组声明中是零值初始化,单独使用是空 map。

方法参数解构

static long test(string type, {string name, long age}){
    println(fmt("%s %s %s", type, name, age));
}

this::test("大学生", {"name":"张三", "age":21});   // 传 map
this::test("大学生", {"张三", 21});                 // 传数组亦可
posted @ 2026-09-13 05:05  方东信  阅读(4)  评论(0)    收藏  举报