在AS3中初始化字典内联

时间:2012-07-26 21:45:37

标签: actionscript-3 dictionary

我正在尝试在ActionScript 3中找到一种初始化字典内联的方法,例如:

private var sampleDic:Dictionary = new Dictionary (
   { "zero", "Hello" },
   { "one", "World" }
);

我尝试了很多方法,但都没有效果。任何人都知道它是否可能,以及如何?

由于

5 个答案:

答案 0 :(得分:8)

不,你不能这样做。您必须构造一个字典,然后在循环中或单独添加值。

答案 1 :(得分:6)

如果它是静态的,你可以用块

来做到这一点
private static var myDict:Dictionary = new Dictionary();
{
     myDict["zero"] = "Hello";
     myDict["one"] = "World";
}

答案 2 :(得分:4)

如果您真的想要这样的东西,可以使用字典工厂:

    public class DictFactory 
    {
        public var dict:Dictionary;
        public function create(obj:Object):Dictionary
        {
            dict = new Dictionary();

            for (var key:String in obj) {
              dict[key] = obj[key];
            }

            return dict;
        }           
    }

用法:

private var sampleDic:Dictionary = new DictFactory().create({ "zero":"Hello", "one": "World" });

DictFactory.create期望具有键值的Object将应用于返回的Dictionary,如果您传递任何其他对象(在AS3中,任何类是Object),结果可能是不合需要的。 :)

答案 3 :(得分:2)

您可以扩展字典类并使用接受初始键值pears的默认构造函数覆盖默认构造函数。

修改

你也可以使用这个脏的JS解决方案:)

import flash.utils.Dictionary;

var dict : Dictionary = function ( d : Dictionary, p : Object ) : Dictionary { for ( var i : String in p ) { d[i] = p[i] }; return d; }(new Dictionary(), {
   "zero": "Hello",
   "one": "World"
})

trace( dict["zero"] );

答案 4 :(得分:0)

如果没有特定的理由使用词典,您可以使用对象。

private var sample:Object = {
   "zero": "Hello",
   "one": "World"
};