Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219541
  • 博文数量: 31
  • 博客积分: 2086
  • 博客等级: 大尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-26 08:46
文章分类

全部博文(31)

文章存档

2011年(4)

2010年(27)

分类: 系统运维

2010-08-03 15:31:50

As3.0中的for…in语句和for each…in语句

5.1.1  for..in语句

循环用于循环访问对象属性或数组元素。例如,可以使用 for..in 循环来循环访问

对象的属性(不按任何特定的顺序来保存对象的属性,因此属性可能以随机的顺序

出现)。

例如:

var myObj:Object = {x:20, y:30};

for (var i:String in myObj)

{

trace(i + ": " + myObj[i]);

}

输出:

x: 20

y: 30

还可以循环访问数组中的元素:

var myArray:Array = ["one", "two", "three"];

for (var i:String in myArray)

{

trace(myArray[i]);

}

输出:

one

two

three

5.1.2  for each…in语句

for each..in 循环用于循环访问集合中的项目,它可以是 XML XMLList 对象中的标

签、对象属性保存的值或数组元素。例如,如下面所摘录的代码所示,可以使用 for

each..in 循环来循环访问对象的属性,但是与 for..in 循环不同的是,for each..in

循环中的迭代变量包含属性所保存的值,而不包含属性的名称:

var myObj:Object = {x:20, y:30};

for each (var num in myObj)

{

trace(num);

}

输出:

 20

 30

您可以循环访问 XML XMLList 对象,如下面的示例所示:

var myXML:XML =

Jane

Susan

John

;

for each (var item in myXML.fname)

{

trace(item);

}

输出

Jane

Susan

John

还可以循环访问数组中的元素,如下面的示例所示:

var myArray:Array = ["one", "two", "three"];

for each (var item in myArray)

{

trace(item);

}

输出:

 one

two

 three

5.1.3  for…in语句与for each…in语句的性能比较

1. 在数组中保存一百万个数据

var testArr:Array = new Array();
for(var i:Number = 0; i < 1000000; i++)
{
    testArr.push(i);
}


//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 each...in语句的速度比for...in语句要快得多,如果有可能,还是先选择for each...in

参考文献:

阅读(10300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~