- 浏览: 1085019 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=70786&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D86400
资讯类型: 翻译
来源页面: http://www.adobe.com/devnet/flash/quickstart/programming_arrays_as3.html
资讯原标题: Programming with the Array class
资讯原作者: Buck DeFore
我的评论:
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
本文阅读要求:
具备知识:
建议具备ActionScript 3编程经验.
用户水平:
初级
需要产品:
Flash Professional
样例:
ArrayMapMethod.zip
ArraySearchMethods.zip
数组是一种很重要的数据结构。数组最基础的用途是存放对象的容器。数组使维护和修改相关对象变得非常简单。当你处理一系列拥有相同特性的变量时,数组的方便性就更显而易见了。比如,你有一个列表的联系人,你可以把它们放入一个数组,这时数组就成为了一个通讯录,你可以很方便的遍历,或者提取想要的条目来进行修改。
下面的章节详细介绍了数组编程的细节。
数组类型
最常见的数组是索引数组。这个类型中,数组中的每一个元素都有一个索引值。AS3中的数组是以0为基数的;数组中第一个元素的索引是0,第二个的索引是1,以此类推。你可以通过中括号操作符 ( [ ] )来获取指定索引的元素: // Create a new array, adding three elements to it
var arr:Array = new Array("a", "b", "c");
trace(arr); // output: a,b,c
// Overwrite the third item (at index 2) with a new string
arr[2] = "aa";
// Set the third index to a new string
arr[3] = "bb";
trace(arr); // output: a,b,aa,cc
复制代码数组中可以包含其他数组。这称作多维数组。数组可以被看作是一行,其中每个元素可以看作是一列。如果一个数组中每个元素包含一个数组,这就是一个二维数组,可以被放入一个很多行和很多列组成的网格中。一个位图可以用一个二维数组来描述,其每个元素都是一行包含每列元素的数组。每列元素包含每个像素的色彩信息: // Create a new array
var arr:Array = new Array();
arr[0] = new Array("a", "b", "c");
arr[1] = new Array("d", "e", "f");
arr[2] = new Array("g", "h", "i");
trace(arr); // output: a,b,c,d,e,f,g,h,i
trace(arr[0]); // output: a,b,c
trace(arr[0][0]); // output: a
trace(arr[0][1]); // output: b
trace(arr[0][2]); // output: c
trace(arr[2][2]); // output: i
复制代码最后一种类型的数组是关联数组,常被称作hash或map。这种数组不含索引,但相应的用键来指引元素。AS3中,关联数组的功能和一个Object类是相同的。关联数组的键值可以被看作是对象的属性。这样,你就可以用对象或数组的语法来创建关联数组: // Create a new array
var indexedArray:Array = new Array();
// Assign index 0 to a new string
indexedArray[0] = "bob";
trace(indexedArray[0]); // output: bob
trace(indexedArray.length); // output: 1
// Create a new array
var associativeArr:Array = new Array();
// Assign a new string to key "name", making the array associative
associativeArr["name"] = "bob";
trace(associativeArr["name"]) // output: bob
trace(associativeArr.length); // output: 0 (length method unavailable to associative arrays)
var obj:Object = new Object();
obj.name = "bob";
trace(obj.name); // output: bob
复制代码注意,不管你是如何创建的关联数组,它始终是一个未排序的键值对,正因如此,它不具备索引数组的特性。一旦一个数组被赋予了键值对,这个数组就无法使用length() 方法来确定里面包含的元素个数。
修改数组内容
你可以使用中括号操作符来对指定索引赋值,你也可以用Array类的方法在数组的开始和结尾加入或删除元素。在数组末尾添加一个元素,使用push()方法。在数组开始增加一个元素使用unshift()方法。你也可以使用 shift()和pop()方法在数组的开头和末尾删除元素。以下的例子展示了这些方法的区别: var arr:Array = new Array();
arr.push("green");
arr.push("blue");
arr.push("violet");
trace(arr); // output: green,blue,violet
arr.unshift("yellow");
arr.unshift("orange");
arr.unshift("red");
trace(arr); // output: red,orange,yellow,green,blue,violet
// Remove the last item from the array
var lastItem:String = arr.pop();
trace(lastItem); // output: violet
// Remove the first item from the array
var firstItem:String = arr.shift();
trace(firstItem); // output: red
trace(arr); // output: orange,yellow,green,blue
复制代码你可以使用splice()方法在数组中间添加或删除元素。splice()方法的第一个参数是起始修改元素的索引: // Create an array with two strings
var arr:Array = new Array("black", "white");
// Add two to the beginning
arr.splice(0, 0, "red", "orange", "yellow");
复制代码如果你是增加元素,第二个参数设为0,后面跟要加的元素: // Add colors to the end
arr.splice(5, 0, "green", "blue", "violet");
复制代码如果你要删除元素,第二个参数设为要删除元素的个数: // Remove two in the middle, starting at the third index
arr.splice(3,2);
复制代码你可以用slice()或concat()方法,以现有的数组来创建新数组。slice()方法返回一个现有数组的子集。concat()方法返回所传给它的参数的合并集。传递给这两个方法的原有数组保持不变。 // Create a combined array without changing an initial array
var initialArray:Array = new Array("red", "orange", "yellow");
// Create an array that combines the initial array with three more strings
var combinedArray:Array = initialArray.concat("green", "blue", "violet");
// Create a subset of this array without changing the original
var slicedArray:Array = combinedArray.slice(3);
trace(initialArray); // output: red,orange,yellow
trace(combinedArray); // output: red,orange,yellow,green,blue,violet
trace(slicedArray); // output: green,blue,violet
复制代码
传递数组中的元素给回调函数
数组类的方法使查询数组内元素和修改元素变得方便。这一节将详细介绍。
数组类的五个方法使用回调函数:every(), some(), forEach(), map(),和filter()。这些方法将函数当作一个参数。数组中的每个元素调用一次指定的函数。每个回调函数要有三个参数:第一个是数组中元素的指针,第二个是该元素的索引,第三个是数组本身。
这些回调函数可以方便的在数组内所有元素上执行代码。比如,你可以用forEach()方法得到数字内所有元素:var arr:Array = new Array( { country:"Cameroon", continent:"Africa" },
{ country:"Laos", continent:"Asia" },
{ country:"Uruguay", continent:"South America" },
{ country:"Romania", continent:"Europe" },
{ country:"Canada", continent:"North America" } );
arr.forEach(traceContinent);
function traceContinent(element:*, index:int, arr:Array):void {
trace(element.country + " is found in " + element.continent);
}
复制代码map()方法和forEach()相似,但它返回的是回调函数所返回的新数组。这个例子创建了一个DataProvider实例,用来格式化填充列表。 (注意你需要FLA的list组件来进行编译):import fl.controls.Button;
import fl.controls.DataGrid;
import fl.controls.List;
import fl.data.DataProvider;
var famousWorks:Array = new Array( { author:"Homer", work:"The Iliad" },
{ author:"Jules Verne", work:"Journey to the Center of the Earth" },
{ author:"James Joyce", work:"Ulysses" },
{ author:"John Steinbeck", work:"Grapes of Wrath" },
{ author:"Allen Ginsberg", work:"Howl" } );
// create grid to show initial array
var grid:DataGrid = new DataGrid();
grid.width = 350;
grid.height = 125;
grid.move(10, 10);
grid.dataProvider = new DataProvider(famousWorks);
addChild(grid);
// create list for formatted output
var list:List = new List();
list.width = 350;
list.move(10, 180);
list.rowCount = famousWorks.length;
addChild(list);
// create button to trigger the map method
var mapBtn:Button = new Button();
mapBtn.x = 80;
mapBtn.y = 10 + grid.height + 10;
mapBtn.width = 200;
mapBtn.label = "Format using Array.map()";
addChild(mapBtn);
mapBtn.addEventListener(MouseEvent.CLICK, onMapButtonClick);
function onMapButtonClick(evt:MouseEvent):void
{
// generate a formmatted list using the map() method
var formattedWorks:Array = famousWorks.map(formatFamousWork);
var dp:DataProvider = new DataProvider(formattedWorks);
list.dataProvider = dp;
}
function formatFamousWork(element:*, index:int, arr:Array):String {
return element.work + " (by " + element.author + ")";
}
复制代码
这个例子的源码在本文最上方ArrayMapMethod.zip中。Flash Professional CS5版本FLA文件是ArrayMapMethod_CS5.fla。
你可以使用filter()方法来创建另一个数组的子集。在filter()方法的回调函数中,如果数组元素需要在新数组中保留则必需返回true,反之返回false。下面的例子随机产生100个0-100的随机数组成数组,使用filter()方法来创建大于90的数组子集:var arr:Array = new Array();
var totalElements:uint = 100;
for(var i:uint = 0; i<totalElements; i++) {
arr[i] = Math.round(Math.random()*100);
}
function isLargerThan90(element:*, index:int, arr:Array):Boolean {
return element > 90;
}
var highestNumbers:Array = arr.filter(isLargerThan90);
trace(highestNumbers);
复制代码every()和some()方法要求回调函数返回一个布尔值。every()方法对数组中每个元素执行回调函数,直到回调函数返回false。相似的,some()方法对每个元素执行回调函数直到返回true。这个动作可以用来确定数组是否达到每个标准。下面的例子确定一个数组是否都是由字符串组成:var arr:Array = new Array();
var totalElements:uint = 1000;
for(var i:uint = 0; i<totalElements; i++) {
arr[i] = "name";
}
trace("Array is entirely composed of strings: " + arr.every(hasOnlyStrings));
function hasOnlyStrings(element:*, index:int, arr:Array):Boolean {
return element is String;
}
arr[42] = 81; // change one element to a number
trace("Array is entirely composed of strings: " + arr.every(hasOnlyStrings));
复制代码 数组中搜索元素
你可以用indexOf()或lastIndexOf()方法寻找数组中的元素。这些方法使用优化的搜索方法,比自定义的搜索循环有更好的表现。下面的例子比较用indexOf()方法搜索、循环搜索和for each搜索:// assumes having two components on the screen:
// 1. A TextArea named outputTxt
// 2. A Button named startBtn
var loopCount:Number = Math.pow(10,6);
var loopingTally:uint = 0;
var forEachTally:uint = 0;
var indexOfTally:uint = 0;
var testsToMake:uint = 5;
// Create a large array composed entirely of zeroes
var a:Array = new Array();
for (var i:uint=0; i<loopCount; i++)
{
a[i] = 0;
}
// Start a timer that will start a new test every half-second, up to the total tests needed
var t:Timer = new Timer(500,testsToMake);
// Run the makeTest function every time the timer ticks
t.addEventListener(TimerEvent.TIMER,makeTest);
// When the timer has completed, run the showResults function
t.addEventListener(TimerEvent.TIMER_COMPLETE,showResults);
t.start();
function findByLooping(toSearchFor:Number):uint {
var start:int = getTimer();
for (i=0; i<loopCount; i++)
{
if(a[i] == toSearchFor) {
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " by looping at index: " + i + " time: " + String(elapsed));
break;
}
}
return elapsed;
}
function findByForEach(toSearchFor:Number):uint {
var start:int = getTimer();
for each(var entry:Number in a)
{
if(entry == toSearchFor) {
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " in for each loop at time: " + String(elapsed));
break;
}
}
return elapsed;
}
function findByIndexOf(toSearchFor:Number):uint {
var start:int = getTimer();
var foundIndex:int = a.indexOf(toSearchFor);
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " by indexOf() at index: " + foundIndex + " time: " + String(elapsed));
return elapsed;
}
function makeTest(e:TimerEvent):void {
// Get a random number
var randomNumber:Number = Math.random();
// Assign it to a random index in our dummy array
a[Math.floor(Math.random()*loopCount)] = randomNumber;
// Find it, timing various methods
loopingTally += findByLooping(randomNumber);
forEachTally += findByForEach(randomNumber);
indexOfTally += findByIndexOf(randomNumber);
}
function showResults(e:TimerEvent):void {
trace("== Average search time by looping: " + loopingTally/testsToMake);
trace("== Average search time by for each: " + forEachTally/testsToMake);
trace("== Average search time by indexOf: " + indexOfTally/testsToMake);
}
复制代码这是一些样例输出:== Average search time by looping: 134.6
== Average search time by for each: 26
== Average search time by indexOf: 6.4
复制代码可以看出,使用indexOf()方法比另外两种方法都要快。
点击Start按钮开始测试: 这个例子的源码在本文最上方ArraySearchMethods.zip中。Flash Professional CS5版本FLA文件是ArraySearchMethods_CS5.fla。
深入学习
关于排序数组的更多信息,请参考ActionScript 3.0 Reference的Array类,包含使用sort()和sortOn()方法的详细介绍。 播放列表的例子在 ActionScript 3.0 Developer's Guide中的"Working with arrays"章节。
资讯类型: 翻译
来源页面: http://www.adobe.com/devnet/flash/quickstart/programming_arrays_as3.html
资讯原标题: Programming with the Array class
资讯原作者: Buck DeFore
我的评论:
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
本文阅读要求:
具备知识:
建议具备ActionScript 3编程经验.
用户水平:
初级
需要产品:
Flash Professional
样例:
ArrayMapMethod.zip
ArraySearchMethods.zip
数组是一种很重要的数据结构。数组最基础的用途是存放对象的容器。数组使维护和修改相关对象变得非常简单。当你处理一系列拥有相同特性的变量时,数组的方便性就更显而易见了。比如,你有一个列表的联系人,你可以把它们放入一个数组,这时数组就成为了一个通讯录,你可以很方便的遍历,或者提取想要的条目来进行修改。
下面的章节详细介绍了数组编程的细节。
数组类型
最常见的数组是索引数组。这个类型中,数组中的每一个元素都有一个索引值。AS3中的数组是以0为基数的;数组中第一个元素的索引是0,第二个的索引是1,以此类推。你可以通过中括号操作符 ( [ ] )来获取指定索引的元素: // Create a new array, adding three elements to it
var arr:Array = new Array("a", "b", "c");
trace(arr); // output: a,b,c
// Overwrite the third item (at index 2) with a new string
arr[2] = "aa";
// Set the third index to a new string
arr[3] = "bb";
trace(arr); // output: a,b,aa,cc
复制代码数组中可以包含其他数组。这称作多维数组。数组可以被看作是一行,其中每个元素可以看作是一列。如果一个数组中每个元素包含一个数组,这就是一个二维数组,可以被放入一个很多行和很多列组成的网格中。一个位图可以用一个二维数组来描述,其每个元素都是一行包含每列元素的数组。每列元素包含每个像素的色彩信息: // Create a new array
var arr:Array = new Array();
arr[0] = new Array("a", "b", "c");
arr[1] = new Array("d", "e", "f");
arr[2] = new Array("g", "h", "i");
trace(arr); // output: a,b,c,d,e,f,g,h,i
trace(arr[0]); // output: a,b,c
trace(arr[0][0]); // output: a
trace(arr[0][1]); // output: b
trace(arr[0][2]); // output: c
trace(arr[2][2]); // output: i
复制代码最后一种类型的数组是关联数组,常被称作hash或map。这种数组不含索引,但相应的用键来指引元素。AS3中,关联数组的功能和一个Object类是相同的。关联数组的键值可以被看作是对象的属性。这样,你就可以用对象或数组的语法来创建关联数组: // Create a new array
var indexedArray:Array = new Array();
// Assign index 0 to a new string
indexedArray[0] = "bob";
trace(indexedArray[0]); // output: bob
trace(indexedArray.length); // output: 1
// Create a new array
var associativeArr:Array = new Array();
// Assign a new string to key "name", making the array associative
associativeArr["name"] = "bob";
trace(associativeArr["name"]) // output: bob
trace(associativeArr.length); // output: 0 (length method unavailable to associative arrays)
var obj:Object = new Object();
obj.name = "bob";
trace(obj.name); // output: bob
复制代码注意,不管你是如何创建的关联数组,它始终是一个未排序的键值对,正因如此,它不具备索引数组的特性。一旦一个数组被赋予了键值对,这个数组就无法使用length() 方法来确定里面包含的元素个数。
修改数组内容
你可以使用中括号操作符来对指定索引赋值,你也可以用Array类的方法在数组的开始和结尾加入或删除元素。在数组末尾添加一个元素,使用push()方法。在数组开始增加一个元素使用unshift()方法。你也可以使用 shift()和pop()方法在数组的开头和末尾删除元素。以下的例子展示了这些方法的区别: var arr:Array = new Array();
arr.push("green");
arr.push("blue");
arr.push("violet");
trace(arr); // output: green,blue,violet
arr.unshift("yellow");
arr.unshift("orange");
arr.unshift("red");
trace(arr); // output: red,orange,yellow,green,blue,violet
// Remove the last item from the array
var lastItem:String = arr.pop();
trace(lastItem); // output: violet
// Remove the first item from the array
var firstItem:String = arr.shift();
trace(firstItem); // output: red
trace(arr); // output: orange,yellow,green,blue
复制代码你可以使用splice()方法在数组中间添加或删除元素。splice()方法的第一个参数是起始修改元素的索引: // Create an array with two strings
var arr:Array = new Array("black", "white");
// Add two to the beginning
arr.splice(0, 0, "red", "orange", "yellow");
复制代码如果你是增加元素,第二个参数设为0,后面跟要加的元素: // Add colors to the end
arr.splice(5, 0, "green", "blue", "violet");
复制代码如果你要删除元素,第二个参数设为要删除元素的个数: // Remove two in the middle, starting at the third index
arr.splice(3,2);
复制代码你可以用slice()或concat()方法,以现有的数组来创建新数组。slice()方法返回一个现有数组的子集。concat()方法返回所传给它的参数的合并集。传递给这两个方法的原有数组保持不变。 // Create a combined array without changing an initial array
var initialArray:Array = new Array("red", "orange", "yellow");
// Create an array that combines the initial array with three more strings
var combinedArray:Array = initialArray.concat("green", "blue", "violet");
// Create a subset of this array without changing the original
var slicedArray:Array = combinedArray.slice(3);
trace(initialArray); // output: red,orange,yellow
trace(combinedArray); // output: red,orange,yellow,green,blue,violet
trace(slicedArray); // output: green,blue,violet
复制代码
传递数组中的元素给回调函数
数组类的方法使查询数组内元素和修改元素变得方便。这一节将详细介绍。
数组类的五个方法使用回调函数:every(), some(), forEach(), map(),和filter()。这些方法将函数当作一个参数。数组中的每个元素调用一次指定的函数。每个回调函数要有三个参数:第一个是数组中元素的指针,第二个是该元素的索引,第三个是数组本身。
这些回调函数可以方便的在数组内所有元素上执行代码。比如,你可以用forEach()方法得到数字内所有元素:var arr:Array = new Array( { country:"Cameroon", continent:"Africa" },
{ country:"Laos", continent:"Asia" },
{ country:"Uruguay", continent:"South America" },
{ country:"Romania", continent:"Europe" },
{ country:"Canada", continent:"North America" } );
arr.forEach(traceContinent);
function traceContinent(element:*, index:int, arr:Array):void {
trace(element.country + " is found in " + element.continent);
}
复制代码map()方法和forEach()相似,但它返回的是回调函数所返回的新数组。这个例子创建了一个DataProvider实例,用来格式化填充列表。 (注意你需要FLA的list组件来进行编译):import fl.controls.Button;
import fl.controls.DataGrid;
import fl.controls.List;
import fl.data.DataProvider;
var famousWorks:Array = new Array( { author:"Homer", work:"The Iliad" },
{ author:"Jules Verne", work:"Journey to the Center of the Earth" },
{ author:"James Joyce", work:"Ulysses" },
{ author:"John Steinbeck", work:"Grapes of Wrath" },
{ author:"Allen Ginsberg", work:"Howl" } );
// create grid to show initial array
var grid:DataGrid = new DataGrid();
grid.width = 350;
grid.height = 125;
grid.move(10, 10);
grid.dataProvider = new DataProvider(famousWorks);
addChild(grid);
// create list for formatted output
var list:List = new List();
list.width = 350;
list.move(10, 180);
list.rowCount = famousWorks.length;
addChild(list);
// create button to trigger the map method
var mapBtn:Button = new Button();
mapBtn.x = 80;
mapBtn.y = 10 + grid.height + 10;
mapBtn.width = 200;
mapBtn.label = "Format using Array.map()";
addChild(mapBtn);
mapBtn.addEventListener(MouseEvent.CLICK, onMapButtonClick);
function onMapButtonClick(evt:MouseEvent):void
{
// generate a formmatted list using the map() method
var formattedWorks:Array = famousWorks.map(formatFamousWork);
var dp:DataProvider = new DataProvider(formattedWorks);
list.dataProvider = dp;
}
function formatFamousWork(element:*, index:int, arr:Array):String {
return element.work + " (by " + element.author + ")";
}
复制代码
这个例子的源码在本文最上方ArrayMapMethod.zip中。Flash Professional CS5版本FLA文件是ArrayMapMethod_CS5.fla。
你可以使用filter()方法来创建另一个数组的子集。在filter()方法的回调函数中,如果数组元素需要在新数组中保留则必需返回true,反之返回false。下面的例子随机产生100个0-100的随机数组成数组,使用filter()方法来创建大于90的数组子集:var arr:Array = new Array();
var totalElements:uint = 100;
for(var i:uint = 0; i<totalElements; i++) {
arr[i] = Math.round(Math.random()*100);
}
function isLargerThan90(element:*, index:int, arr:Array):Boolean {
return element > 90;
}
var highestNumbers:Array = arr.filter(isLargerThan90);
trace(highestNumbers);
复制代码every()和some()方法要求回调函数返回一个布尔值。every()方法对数组中每个元素执行回调函数,直到回调函数返回false。相似的,some()方法对每个元素执行回调函数直到返回true。这个动作可以用来确定数组是否达到每个标准。下面的例子确定一个数组是否都是由字符串组成:var arr:Array = new Array();
var totalElements:uint = 1000;
for(var i:uint = 0; i<totalElements; i++) {
arr[i] = "name";
}
trace("Array is entirely composed of strings: " + arr.every(hasOnlyStrings));
function hasOnlyStrings(element:*, index:int, arr:Array):Boolean {
return element is String;
}
arr[42] = 81; // change one element to a number
trace("Array is entirely composed of strings: " + arr.every(hasOnlyStrings));
复制代码 数组中搜索元素
你可以用indexOf()或lastIndexOf()方法寻找数组中的元素。这些方法使用优化的搜索方法,比自定义的搜索循环有更好的表现。下面的例子比较用indexOf()方法搜索、循环搜索和for each搜索:// assumes having two components on the screen:
// 1. A TextArea named outputTxt
// 2. A Button named startBtn
var loopCount:Number = Math.pow(10,6);
var loopingTally:uint = 0;
var forEachTally:uint = 0;
var indexOfTally:uint = 0;
var testsToMake:uint = 5;
// Create a large array composed entirely of zeroes
var a:Array = new Array();
for (var i:uint=0; i<loopCount; i++)
{
a[i] = 0;
}
// Start a timer that will start a new test every half-second, up to the total tests needed
var t:Timer = new Timer(500,testsToMake);
// Run the makeTest function every time the timer ticks
t.addEventListener(TimerEvent.TIMER,makeTest);
// When the timer has completed, run the showResults function
t.addEventListener(TimerEvent.TIMER_COMPLETE,showResults);
t.start();
function findByLooping(toSearchFor:Number):uint {
var start:int = getTimer();
for (i=0; i<loopCount; i++)
{
if(a[i] == toSearchFor) {
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " by looping at index: " + i + " time: " + String(elapsed));
break;
}
}
return elapsed;
}
function findByForEach(toSearchFor:Number):uint {
var start:int = getTimer();
for each(var entry:Number in a)
{
if(entry == toSearchFor) {
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " in for each loop at time: " + String(elapsed));
break;
}
}
return elapsed;
}
function findByIndexOf(toSearchFor:Number):uint {
var start:int = getTimer();
var foundIndex:int = a.indexOf(toSearchFor);
var end:int = getTimer();
var elapsed:int = end - start;
trace ("Found " + toSearchFor + " by indexOf() at index: " + foundIndex + " time: " + String(elapsed));
return elapsed;
}
function makeTest(e:TimerEvent):void {
// Get a random number
var randomNumber:Number = Math.random();
// Assign it to a random index in our dummy array
a[Math.floor(Math.random()*loopCount)] = randomNumber;
// Find it, timing various methods
loopingTally += findByLooping(randomNumber);
forEachTally += findByForEach(randomNumber);
indexOfTally += findByIndexOf(randomNumber);
}
function showResults(e:TimerEvent):void {
trace("== Average search time by looping: " + loopingTally/testsToMake);
trace("== Average search time by for each: " + forEachTally/testsToMake);
trace("== Average search time by indexOf: " + indexOfTally/testsToMake);
}
复制代码这是一些样例输出:== Average search time by looping: 134.6
== Average search time by for each: 26
== Average search time by indexOf: 6.4
复制代码可以看出,使用indexOf()方法比另外两种方法都要快。
点击Start按钮开始测试: 这个例子的源码在本文最上方ArraySearchMethods.zip中。Flash Professional CS5版本FLA文件是ArraySearchMethods_CS5.fla。
深入学习
关于排序数组的更多信息,请参考ActionScript 3.0 Reference的Array类,包含使用sort()和sortOn()方法的详细介绍。 播放列表的例子在 ActionScript 3.0 Developer's Guide中的"Working with arrays"章节。
发表评论
-
[心得] for和for...in...遍历数组的效率,与tonyemotion版完全不同
2011-08-22 21:46 0首先tonyemotion版地址:http://bbs.9ri ... -
[转]TLF 文字布局框架的内存问题
2011-08-09 00:34 0http://bbs.airia.cn/home.php? ... -
[转]flash/actionscript3 性能优化汇总
2011-07-27 01:38 0http://www.iamcoding.com/?p=173 ... -
[转]swf / actionscript3 执行顺序
2011-07-27 01:36 0http://www.iamcoding.com/?p=198 ... -
[转]flash重绘机制总结
2011-07-27 01:35 0重绘,是flash性能的一 ... -
文字如何缩放?
2011-07-26 23:20 1248做个文件打印的东东,需要预览,就是把保存的Sprite类缩小再 ... -
AS3的一些优化计算方法
2011-07-06 12:56 0http://www.cnitblog.com/flashli ... -
[转] 关取绝对值的效率问题
2011-05-26 23:47 1520由一个项目用到很多的绝对值,我简单测试了一下,我想知道Math ... -
[转]Flash终极瘦身术--flash减k
2011-05-25 16:40 1264... -
[新手常见问题] Flash代码优化(整理)
2011-05-18 00:12 0看到代码优化就给复制发上来了,发了才发现文章太旧了,部分过时了 ... -
[转] 蛋疼的adobe,他让我蛋疼了一个下午。buttonMode的问题。。。
2011-05-16 21:05 0在为公司整理架构的时候写button组建。。。发现了一个蛋疼问 ... -
Flash的运行机制:异步单线程
2011-05-11 00:34 1951http://bbs.9ria.com/thread-4862 ... -
[心得] AS3游戏中可视对象上限及位图相关的内存消耗实测
2011-04-29 22:44 0http://bbs.9ria.com/viewthread. ... -
使用弱引用
2011-04-28 19:07 0//true表示使用弱引用 var di ... -
[转] 弱引用。
2011-04-27 01:18 0http://bbs.9ria.com/viewthread. ... -
重新关注AS垃圾回收问题
2011-04-12 00:47 0http://www.shch8.com/blog/post/ ... -
[转]Flash 平台应用性能优化官方文档
2011-04-08 19:54 01. 关于存储 使用适当 ... -
[转]位图数据内存优化
2011-03-31 15:55 2808最近协助同事对Flash相册项目做了程序优化,觉得每个优化步骤 ... -
[转]AS3中Timer,setTimeout,setInterval对gc的对比
2011-03-28 17:08 0http://hongweimail.blog.163.com ... -
[转]自制中文字库嵌入——单色图形面积压缩/加密法
2011-03-23 19:59 1987自制中文字库嵌入—— ...
相关推荐
这个框架基于ActionScript编程语言和Flash Player或Adobe AIR运行时环境,能够创建高度交互、视觉效果丰富的Web应用。Flex4中文API文档是开发者的重要参考资料,它以CHM(Compiled Help Manual)格式提供,便于离线...
Flash MX/Flex是Adobe公司推出的一系列用于创建交互式Web内容的开发工具。Flash MX以其强大的动画制作能力和丰富的交互性,一度成为网页设计的主流技术。而Flex是基于ActionScript 3.0的开发框架,专为构建富互联网...
在IT行业中,Flex是一种基于ActionScript 3.0和Flash Player的开源框架,用于构建富互联网应用程序(RIA)。本文将详细探讨如何使用Flex创建多曲线图,并实现实时更新功能。 一、Flex概述 Flex是Adobe开发的一个...
Flex中文API是Adobe Flex开发平台的重要参考资料,它为开发者提供了详细的API接口说明,帮助开发者更好地理解和使用Flex框架来构建富互联网应用程序(RIA)。Flex是一种基于ActionScript和MXML的开源框架,主要用于...
Adobe Flex是一种开源的框架,主要用于构建富互联网应用程序(RIA),它使用ActionScript编程语言和MXML标记语言。在处理数据交换时,特别是与服务器进行异步通信时,JSON(JavaScript Object Notation)格式因其轻...
Adobe Flex 是一个开源框架,主要用于构建富互联网应用程序(RIA),它使用ActionScript编程语言和MXML标记语言。在开发Flex项目时,遵循一套编码规范至关重要,这有助于提高代码的可读性、可维护性和团队协作效率。...
### Adobe Flex 3 开发者指南:ActionScript 3.0 编程基础 #### 一、概述 《Adobe Flex 3》开发者指南是专为希望深入掌握使用ActionScript 3.0 开发应用程序的技术人员准备的一份详尽文档。这份手册不仅提供了关于...
《Adobe ActionScript 3.0 编程 2008》是一本专注于ActionScript 3.0技术的官方中文帮助文档,对于想要深入学习AS3.0的初学者而言,无疑是一份极其宝贵的资源。ActionScript是Adobe开发的一种脚本语言,主要用于...
Flex3是Adobe开发的一款用于构建富互联网应用(RIA)的框架,它基于ActionScript 3.0编程语言和Flash Player运行环境。在这个标题为“Flex3中用到的工具类包,含有json类”的资源中,我们可以看到它包含了处理JSON...
在Adobe Flash Professional的开发环境中,ActionScript 3(AS3)是核心编程语言,它为创建交互式内容、动态图形和丰富的互联网应用程序提供了强大的支持。AS3的API(Application Programming Interface)是开发者...
2. **颜色过滤器(ColorMatrixFilter)**:Flex提供了`flash.filters.ColorMatrixFilter`类,它可以通过调整像素的RGB值来改变图像颜色。例如,我们可以创建一个颜色矩阵来实现饱和度、亮度、对比度的调整,或者直接...
在Flex 1.5及之前版本中,实现这一功能较为复杂,需要通过Flash Player API中的`FileReference`类来进行操作。而到了Flex 2.0,这个类被集成到了Flex类库中,使得上传下载功能变得更加简便易用。 #### 技术背景与...
Flash、Flex和AIR是Adobe公司推出的RIA(富互联网应用)开发平台的重要组成部分。它们广泛应用于开发网络应用程序和桌面应用程序。在这些平台上开发应用时,内存管理是保证程序稳定运行的重要方面。内存监测及优化...
本文将探讨如何在Adobe Flex中读取包含中文字符的Excel文件,主要涉及使用AS3XLS库来解决这个问题。 首先,AS3XLS是一个ActionScript 3的开源库,专门用于处理Microsoft Excel文件。它允许Flex应用程序创建、读取和...
在本文中,我们将深入探讨如何使用Adobe Flex进行Android应用程序开发,并通过一个具体的“list”控件实例来学习Flex在Android平台上的应用。Flex是一种强大的开放源代码框架,它基于ActionScript编程语言,用于构建...
本篇文章将深入探讨如何利用Adobe Flex和Flash技术,结合ActionScript 3(AS3)来构建一个功能完善的MMORPG背包系统DEMO。 一、Flex与Flash概述 Flex是一种基于开放源代码的MXML和ActionScript框架,用于构建富...
Flex是一款强大的开发工具,用于创建互动丰富的基于Flash的用户界面。在Flex应用中,数据交互主要通过RemoteObject组件来实现,它可以调用后台Java或.NET服务,从而进行CRUD(创建、读取、更新和删除)操作。 **...
1. **Adobe Flex架构**:Flex框架由Flex SDK和Flex Builder(现在称为Flash Builder)组成,SDK包含编译器、库和工具,用于创建Flex应用程序,而Builder则提供了一个集成开发环境(IDE)来简化开发过程。 2. **...
- Flex Builder 4同样支持多种项目类型,包括Flex项目、Flex Mobile项目、Adobe AIR应用程序等。 #### 26. 什么是RSL,如何使用? - **答案**:RSL(Runtime Shared Library)是在运行时按需加载的共享库。使用...