如何克隆字典(及其内容)?

时间:2012-08-28 15:28:47

标签: actionscript-3 dictionary clone

我用Google搜索了一段时间来找到克隆dic的方法,我发现了一些选项,但它们没有用。一种是使用byteArray,它只有在你注册所有相关的条款时才有效,你的类的所有构造函数参数都是默认值< - 在我的情况下不是一个选择。

哦,是一个副本,但仅限于第一个值,这个:

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

但是,它并没有在主词典中克隆一个词典。

你知道怎么做一个给定字典的完美克隆,即使它里面有另一个字典吗?

感谢。

1 个答案:

答案 0 :(得分: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