9

私はActionScript3で辞書をインラインで初期化する方法を見つけようとしています。

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

私は多くの方法を試しましたが、どれもうまくいきません。誰もがそれが可能かどうか、そしてどのように知っていますか?

ありがとう

4

5 に答える 5

8

いいえ、できません。辞書を作成してから、ループ内または個別に値を追加する必要があります。

于 2012-07-26T22:03:05.697 に答える
6

静的な場合は、ブロックを使用してこれを行うことができます

private static var myDict:Dictionary = new Dictionary();
{
     myDict["zero"] = "Hello";
     myDict["one"] = "World";
}
于 2013-05-28T12:15:23.650 に答える
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、返されたディクショナリに適用されるキー値を持つオブジェクトを期待します。他のオブジェクト(AS3では、どのクラスもObject)を渡すと、結果が望ましくない場合があります。:)

于 2012-07-26T23:44:59.140 に答える
2

辞書クラスを拡張し、デフォルトのコンストラクターを初期の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"] );
于 2012-07-27T15:25:21.583 に答える
0

辞書を使用する特別な理由がない場合は、オブジェクトを使用して使用できます。

private var sample:Object = {
   "zero": "Hello",
   "one": "World"
};
于 2012-07-26T22:05:54.173 に答える