3

我用谷歌搜索了一些时间来找到一种克隆 dic 的方法,我找到了一些选项,但它们没有用。一个是使用 byteArray,它仅在您注册所有涉及的类并且您的类的所有构造函数参数都具有默认值 <- 在我的情况下不是一个选择时才有效。

Ohter 是一个副本,但仅适用于第一个值,这个:

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 回答