我用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;
}
但是,它并没有在主词典中克隆一个词典。
你知道怎么做一个给定字典的完美克隆,即使它里面有另一个字典吗?
感谢。
答案 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