var a:Array = ["a","b","c"];
var b:Array;
/* insert code here to copy 'a' and assign it to 'b'*/
答案 0 :(得分:11)
取自As3参考指南:
Array类没有内置功能 制作数组副本的方法。 您可以创建一个浅表副本 通过调用concat()数组 或者没有参数的slice()方法。 在浅拷贝中,如果是原始的 array包含作为对象的元素, 只有对象的引用 复制而不是对象 他们自己。副本指向 与原始对象相同的对象。任何 对对象所做的更改 反映在两个阵列中。
如果你在concat和slice之间做出选择,那么Concat将是你要走的路,因为concat在性能方面更快。
澄清:
private function shallowCopy():void{
var a:Array = ["h", "e", "l", "l", "o"];
var b:Array = a.concat();
trace("Shallow copy:");
trace("Before delete: " + a);
trace("Before delete: " + b);
delete a[0];
trace("After delete: " + a);
trace("After delete: " + b);
}
答案 1 :(得分:8)
有问题的一行:
var b:Array = a.concat();
答案 2 :(得分:0)
如果数组只包含字符串或数字值,则足以制作“浅”副本,如Adam和rzetterberg所述。
如果数组包含其他数组或对象/类实例等,那么如果您需要内部的所有对象都是唯一的而不仅仅是引用,那么您应该进行深层复制。您可以通过以下方式实现这一目标:
var ba:ByteArray = new ByteArray();
ba.writeObject(a); // Copy the original array (a) into a ByteArray instance
ba.position = 0; // Put the cursor at the beginning of the ByteArray to read it
var b:Array = ba.readObject(); // Store a copy of the array in the destination array (b)
ba.clear(); // Free memory
这对于复制没有任何连接或拼接方法的对象也很有用。