私はActionScript3で辞書をインラインで初期化する方法を見つけようとしています。
private var sampleDic:Dictionary = new Dictionary (
{ "zero", "Hello" },
{ "one", "World" }
);
私は多くの方法を試しましたが、どれもうまくいきません。誰もがそれが可能かどうか、そしてどのように知っていますか?
ありがとう
私はActionScript3で辞書をインラインで初期化する方法を見つけようとしています。
private var sampleDic:Dictionary = new Dictionary (
{ "zero", "Hello" },
{ "one", "World" }
);
私は多くの方法を試しましたが、どれもうまくいきません。誰もがそれが可能かどうか、そしてどのように知っていますか?
ありがとう
いいえ、できません。辞書を作成してから、ループ内または個別に値を追加する必要があります。
静的な場合は、ブロックを使用してこれを行うことができます
private static var myDict:Dictionary = new Dictionary();
{
myDict["zero"] = "Hello";
myDict["one"] = "World";
}
そのようなものが本当に必要な場合は、辞書ファクトリを使用できます。
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では、どのクラスもObject)を渡すと、結果が望ましくない場合があります。:)
辞書クラスを拡張し、デフォルトのコンストラクターを初期のKey-Valueペアを受け入れるコンストラクターでオーバーライドできます。
編集:
このダーティな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"
};