as3中数组的copy之concat
2010年07月18日
[b][/b] 先来看一下spec中说concat是干啥D:
Concatenates the elements specified in the parameters with the elements in an array and creates a new array. If the parameters specify an array, the elements of that array are concatenated.
一直(没就是近个月,刚刚接触AS
)以为AS中Array的连接只是在原来数组的地址上开辟一个足够大的空间。但今天写代码才发现我错了
。先看一下代数复制的一个代码:
var ori:Array = new Array();
ori.push([1, 2, 3]);
ori.push([4, 5, 6]);
var sec:Array = new Array();
sec.push([7,8]);
var cur:Array = ori.concat(sec);
trace(cur);
输出:
1,2,3,4,5,6,7,8
好,再来两句:
cur[0][0] = 20;
trace(ori[0][0]);
输出20, 对新数组的修改会影响到原来数组的值,再看
cur[2][0] = 0;
trace(sec[0][0]);
此时输出 0, 对新数组的第三个数组(对应接上去的数组即sec)修改也会影响到被接上去的数组,
可见,以数组实例去连接数组是一以链表的方式来实现的。
还有一种情况,我们不用数组实例,用数组值,看下面代码:
var thir:Array = [12,34];
var cur:Array = ori.concat(thir);
然后当我们再 cur[2][0] = 0;时就报错了,
ReferenceError: Error #1056: 无法为 Number 创建属性 0。
它不会在再生成一个维数组(的引用),而是简单把thir中的元素当成一个个的数值并赋给cur[2],即顶级数组存是的一个值,而不是指针(引用)。
trace(cur[2]); 就是输出12了。
trace(cur[3]); 就是输出34了。
当
cur[0] = sec;
trace(cur);
trace(ori);
这时候cur就产生变化,但ori依然没有办法,因为cur[0],改了引用,已经不是引用ori[0]了,但些时cur[1]还是保持着原来的引用ori[1]。
发表于: 2010-07-18 ,修改于: 2010-07-18 19:56,已浏览10次,有评论0条 推荐 投诉
[b][/b][b][/b]
2010年07月18日
[b][/b] 先来看一下spec中说concat是干啥D:
Concatenates the elements specified in the parameters with the elements in an array and creates a new array. If the parameters specify an array, the elements of that array are concatenated.
一直(没就是近个月,刚刚接触AS
)以为AS中Array的连接只是在原来数组的地址上开辟一个足够大的空间。但今天写代码才发现我错了
。先看一下代数复制的一个代码:
var ori:Array = new Array();
ori.push([1, 2, 3]);
ori.push([4, 5, 6]);
var sec:Array = new Array();
sec.push([7,8]);
var cur:Array = ori.concat(sec);
trace(cur);
输出:
1,2,3,4,5,6,7,8
好,再来两句:
cur[0][0] = 20;
trace(ori[0][0]);
输出20, 对新数组的修改会影响到原来数组的值,再看
cur[2][0] = 0;
trace(sec[0][0]);
此时输出 0, 对新数组的第三个数组(对应接上去的数组即sec)修改也会影响到被接上去的数组,
可见,以数组实例去连接数组是一以链表的方式来实现的。
还有一种情况,我们不用数组实例,用数组值,看下面代码:
var thir:Array = [12,34];
var cur:Array = ori.concat(thir);
然后当我们再 cur[2][0] = 0;时就报错了,
ReferenceError: Error #1056: 无法为 Number 创建属性 0。
它不会在再生成一个维数组(的引用),而是简单把thir中的元素当成一个个的数值并赋给cur[2],即顶级数组存是的一个值,而不是指针(引用)。
trace(cur[2]); 就是输出12了。
trace(cur[3]); 就是输出34了。
当
cur[0] = sec;
trace(cur);
trace(ori);
这时候cur就产生变化,但ori依然没有办法,因为cur[0],改了引用,已经不是引用ori[0]了,但些时cur[1]还是保持着原来的引用ori[1]。
发表于: 2010-07-18 ,修改于: 2010-07-18 19:56,已浏览10次,有评论0条 推荐 投诉
[b][/b][b][/b]