注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
SQL 语法参考
SQL 语法参考手册
C# vs VB7之语法与编程
UltraEdit也支持Delphi语法高亮
网页中Delphi代码语法上色程序 源
WML Script语法基础
浅谈PHP语法(一)
浅谈PHP语法(二)
浅谈PHP语法(三)
浅谈PHP语法(四)
您现在的位置: 顶尖设计 >> IT学院 >> 图形 >> 网页 >> flash >> 基础教学 >> 文章正文
谈谈Flash的一些语法基础和系统核心
作者:ox_thedarkness  来源:闪吧  点击:  更新:2005-11-9
简介:
.6 Array:多种数据结构的集合
Array也是object的一种。
Array是多种数据结构的集合。
在帮助文档中查一查 Array class 就会找到Array的说明。
Array实现了堆栈和队列:
Array.push Array.pop Array.shift Array.unshift
这是flash更加不需要链表的理由。 Array 也是一个Object,不过有不少特权,比如,你可以这样定义一个Array:
var a = [];
var b = [10, 20 ,30];
var c = new Array(1,2,3);
var 2DArray = [[1, 3, 10] ,
[21, 5, 9 ]];
var myArray = [["hehe" ,12] , 78 , a];
系统会把上面的东东自动处理成数组。 多维数组 所有object都是1维的,数组也不例外。
多维数组实际上每个元素都是一个小数组的引用。 比如:
var 2DArray = [[1, 3, 10] ,
[21, 5, 9 ]];
那么 2DArray 有两个成员: 2DArray[0] 和 2DArray[1]
分别引用 [1,3,10] 和 [21,5,9] 托flash语法的福,所有多维数组应有的访问方法他都“自然而然”的拥有了:
2DArray //2DArray这个引用
2DArray[0] //2DArray[0]这个引用
2DArray[0][1] //2DArray[0]的第二个元素,值为3
注意,和object一样,你必须首先将a建立成一个数组,然后才能使用 a[<index>]来添加子项。比如:
//直接写
a[0] = 10; //错误。只有object才能添加子项。你试试trace(a[0]),结果是 undefined a = []
a[0] = 10; //正确 Array有一些属性(注意,属性不在 for in 作用范围内),比如Array.length返回数组的大小。另外,他重载了Array.toString方法,所以trace(Array)会显示一排东东~~~
数组的下标是从0开始的。
//----------------------------------------------------------------------------------------------
var a = [10,20,30]
trace(a);
trace( a. length);
//看看这个有趣的事:我们跳着定义,直接定义a[10]
a[10] = 40;
trace(a);
trace( a.length);
结果是:
10,20,30
3
10,20,30,undefined,undefined,undefined,undefined,undefined,undefined,undefined,40
11
呵呵,中间的值都被空起来了。所以,做展开的稀疏矩阵还是用object比较好
Array.sort();
Array.sortOn(name);
他们对数组的每一个元素排序。
这两个函数在 6和 7里面的表现完全不同。 这两个方法在 mx里面不好用。 首先,他们是对字符串排序,所以数字1,2,3,4,5,6,7,8,9,10会被排成 1, 10, 2, 3, 4, 5, 6, 7, 8, 9 (寒一个……)
第二,效率不高,应该是用as实现的。 在2004里面,这两个排序都有了可选参数,可以提供对数字的排序,更重要的是速度大增,怀疑这次排序由内核实现的。 //----------------------------------------------------------------------------------------------
a = [];
for(var i =0;i<21;i++) a[i] = i; a.sort();
trace(a); a.sort(Array.NUMERIC);
trace(a);
//----------------------------------------------------------------------------------------------
结果
0,1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
第一次就是标准的flash6排序的结果,乱七八糟~~~小心哦~~~~
我在6里面解决的方法是:所有排序数都加上一个大数再参与排序,比如 0 就是10000, 10就是10010 ……如此曲折阿。
如何复制一个数组呢?
由于Array也是object,所以数组名也是引用,如果你像这样复制数组的话,得到的只是员数组的引用而已:
a=[1,2,3]
b=a;
a[0] = 10;
trace(b);

结果:10,2,3
b当然也变了,因为a和b根本都在引用同一个数组嘛
那么如何复制呢?
函数 Array.slice(IndexA, IndexB)
返回数组的 IndexA、IndexA+1......IndexB-1的部分构成的新数组,如果IndexB未定义则一直返回到最后一个元素。
所以对于简单数组,我们可以:
b = a.slice(0);
然而同样的,如果数组中的元素是引用的话,新数组中对应元素也是引用……所以对于一个典型的二维数组:
a= [ [1,2,3],
[4,5,6]];
b = a.slice(0);
那么b 就得到一个新的数组,但是只有两个元素:b[0]和b[1],他们仍然引用着a[0] a[1]引用的那两个数组……
你在后面加上:
a[0][0] = 100;
trace(b[0][0]);
就明白这种方法失败了……
对于复杂数组,系统并没有提供方便的复制方法,你必须明白你自己数组的结构。比如上述2维数组,你需要模仿a重购一个同样的数组,他的每一个成员都是a的对应成员的复制品:
b = [];
for (var i in a){
b[i] = a[i].slice(0);
}
a= [ [1,2,3],
[4,5,6]];
b = [];
for (var i in a){
b[i] = a[i].slice(0);
}
a[0][0] = 100;
trace(a[0][0]);
trace(b[0][0]);
结果是
100
1





  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务