ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**原教程中的Hash章节已经在Haxe新版本中移除,具体请参考官方文档关于Map的介绍。** Map是一个键值对的容器。通常归类为关联数组,字典或者符号表。 下面是一个简单的使用Map的例子: ~~~ class Main { static public function main() { // 像数组一样初始化,但是使用 // map 语法,带有 // '=>' 操作符。 Maps可以对 // key value的类型进行显式定义 var map1:Map<Int, String> = [1 => "one", 2=>"two"]; // 或者可以推断类型 var map2 = [ "one"=>1, "two"=>2, "three"=>3 ]; $type(map2); // Map<String, Int> // 键必须唯一 // Error: 重复的key //var map3 = [1=>"dog", 1=>"cat"]; // Maps 的values可以使用数组形式的 // 访问语法 "[]"访问 var map4 = ["M"=>"Monday", "T"=>"Tuesday"]; trace(map4["M"]); //Monday // Maps默认迭代值 var valueSum; for (value in map4) { trace(value); // Monday \n Tuesday } // 可以通过 // keys() 方法迭代键 for (key in map4.keys()) { trace(key); // M \n T } // 像数组一样,一个新的Map可以使用推导 var map5 = [ for (key in map4.keys()) key => "FRIDAY!!" ]; // {M => FRIDAY!!, T => FRIDAY!!} trace(map5); } } ~~~ 在表面之下,一个Map是一个抽象类型。在编译时,它转换到一个专门的类型(取决于键的类型): * String: haxe.ds.StringMap * Int: haxe.ds.IntMap * EnumValue: haxe.ds.EnumValueMap * {}: haxe.ds.ObjectMap Map类型在运行时不存在,被上面的一种对象取代。 Map的数组形式访问使用key类型。 更好的认识Map类型,输入如下代码并保存为 MapTest.hx : ~~~ class MapTest { static public function main() { var myMap:Map<String,Int> = new Map(); myMap.set("one", 1); myMap.set("two", 2); myMap.set("three", 3); trace(myMap.get("three")); trace(myMap.get("two")); trace(myMap.get("one")); } } ~~~ 创建Map,然后使用 set 方法来添加三个项到Map对象,使用字符串标识符,或者键。接下来,通过get 方法获取对象里的相应值。