| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
谈谈BLOG营销中的
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
HKflash提供免费个
谈谈我做站失败的
谈谈个人网站发展
谈谈CNNIC 域名投
谈谈网站与网络营

谈谈Flash的一些语法基础和系统核心 2.6 Array:多种数据结构的集合           

谈谈Flash的一些语法基础和系统核心 2.6 Array:多种数据结构的集合

作者:佚名 来源:闪吧 作者: ox_thedarkness 更新:2007-1-13 20:47:28 错误报告 我要投稿

2.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
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。