for循环效率
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
新的 for each … in 除了遍历XML,同样可以用来遍历数组和对象。创建“百万雄兵”:
var testArr:Array = new Array();
for(var i:Number = 0; i < 1000000; i++)
{
testArr.push(i);
}
以前的 for 和 for … in 以及新的 for each … in 循环:
//for 260毫秒
var len:Number = testArr.length;
for(var j:Number = 0; j < len; j++)
{
testArr[j]++;
}
//for ... in 8000毫秒
for(var k:String in testArr)
{
testArr[k]++;
}
//for each ... in 58毫秒
for each (var m:Number in testArr)
{
m++;
}
效率如何呢?经过多次测试,for 循环平均260毫秒(不预存数组长度平均400毫秒),for … in 循环平均8000毫秒,for each … in 循环58毫秒!!所以应该尽量避免 for … in ,多用 for each … in ,用for循环的话最好预存数组长度(var len:Number = testArr.length;)。
Object的情况,for … in 平均560毫秒,for each … in 平均8毫秒。
var testObj:Object = new Object();
for(var i:Number = 0; i < 100000; i++)
{
testObj[i] = i + 1;
}
//for ... in 读取标签 560毫秒
for(var j:String in testObj)
{
testObj[j]++;
}
//for each ... in 直接读值 8毫秒
for each(var k:Number in testObj)
{
k++;
}
for……in和for each……in
var obj:Object={
key1:"value1",
key2:"value2",
key3:"value3"};
for(var k in obj){
trace("键:"+k+"\t值:"+obj[k]);
}
/*输出
键:key1 值:value1
键:key2 值:value2
键:key3 值:value3
*/
for each(var k in obj){
trace("值:"+k);
}
/*输出
值:value1
值:value2
值:value3
*/
可以看出,for……in和for each……in的区别在于,for……in的枚举变量代表的是键,必须要通过数据访问符[]加上这个键值,才能访问到集合成员。而for each……in的枚举变量k则直接代表集合的成员。也就是说,当程序需要使用键的信息时,用for……in;只需要访问集合成员时,使用for each……in最方便。在实践中,for each……in使用比for……in多一些。大部分情况下,我们并不需要知道成员的名字(键)。
xmlns:mx="library:///flex/mx"
minWidth="955"
minHeight="600">
private var xmlData:XML=
;
protected function btn_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
//test for each in
trace("test test for each in--------------------");
for each (var xml:XML in xmlData.item)
{
trace("循环===" + xml); //取xml的值
}
trace("test for in--------------------");
//test for in
for (var xml1:String in xmlData.item)
{
trace("循环===" + xml1 + "____" + xmlData.item[xml1]); //取xml的值
}
//trace结果
/**
* test test for each in--------------------
循环===
循环===
循环===
循环===
循环===
test for in--------------------
循环===0____
循环===1____
循环===2____
循环===3____
循环===4____
***/
}
]]>
click="btn_clickHandler(event)"/>