我花了一些时间寻找一种克隆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;
}

但是,它不会在主字典中克隆词典。

您知道如何对给定的字典进行完美的克隆吗,即使其中有另一个字典也是如此?

谢谢。

最佳答案

制作一个递归函数来检查元素类型,如果它们本身是字典,则继续递归和复制。

像(未经测试的):

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

关于actionscript-3 - 如何克隆字典(及其内容)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12162607/

10-10 23:23
查看更多