我正在尝试找到一种在 ActionScript 3 中初始化 Dictionary inline 的方法,例如:
private var sampleDic:Dictionary = new Dictionary (
{ "zero", "Hello" },
{ "one", "World" }
);
我尝试了很多方法,但没有一个有效。任何人都知道这是否可能,以及如何?
谢谢
我正在尝试找到一种在 ActionScript 3 中初始化 Dictionary inline 的方法,例如:
private var sampleDic:Dictionary = new Dictionary (
{ "zero", "Hello" },
{ "one", "World" }
);
我尝试了很多方法,但没有一个有效。任何人都知道这是否可能,以及如何?
谢谢
不,你不能这样做。您必须构建一个字典,然后在循环中或单独添加值。
如果它是静态的,您可以使用块来执行此操作
private static var myDict:Dictionary = new Dictionary();
{
myDict["zero"] = "Hello";
myDict["one"] = "World";
}
如果你真的想要这样的东西,你可以使用 Dictionary 工厂:
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
期望一个带有键值的对象,它将应用于返回的字典,如果您传递任何其他对象(在 AS3 中,任何类都是对象),结果可能是不受欢迎的。:)
您可以扩展字典类并使用接受初始键值梨的构造函数覆盖默认构造函数。
编辑:
你也可以使用这个肮脏的 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"] );
如果没有特定的理由使用字典,你可以用一个对象来做。
private var sample:Object = {
"zero": "Hello",
"one": "World"
};