3

ディックを複製する方法を見つけるためにしばらくグーグルで検索しましたが、いくつかのオプションが見つかりましたが、機能しませんでした。1 つは byteArray を使用することでした。関連するすべてのクラスを登録し、クラスにすべてのコンストラクタ パラメータがデフォルト値である場合にのみ機能します <- 私の場合は選択できません。

その他は、コピーですが、最初の値のみでした。これは次のとおりです。

private function clone(original:Dictionary):Dictionary {
    var cloned:Dictionary = new Dictionary();
    for(var key:Object in original) {
        cloned[key] = original[key];
    }
    return cloned;
}

ただし、メイン辞書内の辞書は複製されません。

内部に別の辞書が含まれている場合でも、特定の辞書の完全なクローンを作成する方法を知っていますか?

ありがとう。

4

1 に答える 1

1

要素の型をチェックする再帰関数を作成します。それらが辞書自体である場合は、再帰とコピーを続けます。

(未テスト) のようなもの:

private function clone(original:Dictionary):Dictionary {
    var cloned:Dictionary = new Dictionary();
    for(var key:Object in original) {
      if( original[key]  is Dictionary)
         cloned[key] = clone(original[key]);
      else
         cloned[key] = original[key];
    }
    return cloned;
}

編集 :

次のような単純なネストされた辞書で機能するようです:

var dic:Dictionary = new Dictionary();
dic["test"] = 5;
dic["otherDic"] = new Dictionary();
dic["otherDic"]["foo"] = 1;
dic["otherDic"]["bar"] = "bar";

var copy:Dictionary = clone(dic);

dic["test"] = 0;
dic["otherDic"]["foo"] = 0;
dic["otherDic"]["bar"] = "changed";
    //copy doesn't change, copy and dic are different dictionaries
于 2012-08-28T15:39:47.897 に答える