as3中for in 和 for each in的区别

本文详细介绍了foreach...in循环与for...in循环的主要区别。foreach...in循环获取的是对象属性值,而for...in循环获取的是属性名。文章通过实例展示了两种循环在处理数组、对象及XML文档时的不同行为。

 

 

与for...in循环不同的是,for each...in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).


例如: 
1 var myObj:Object = {x:20, y:30}; 
2 for (var i:String in myObj) { 
3     trace (i + ": " + myObj[i]); 
4 } 
5 // output: 
6 // x: 20 
7 // y: 30 
由上代码可知道for..in是把数组的元素或对象的属性名 依次取过来。 


1 var myObj:Object = {x:20, y:30}; 
2 for each(var num in myObj) { 
3     trace (num); 
4 } 
5 // output: 
6 // 20 
7 // 30 
由上代码可知道for each..in是把对象的属性名对应的值 依次取过来。 


1 var myArray:Array = ["one", "two", "three"]; 
2 for (var i:String in myArray) { 
3     trace (myArray[i]); 
4 } 
5 /* output 
6 one 
7 two 
8 three 
9 */ 
10 
如果用for each..in返回将是undefined。 



对于XML文档:  

1 var myXML:XML = <users> 
2 <fname>Jane</fname> 
3 <fname>Susan</fname> 
4 <fname>John</fname> 
5 </users>; 
6 for (var item in myXML.fname) { 
7        trace(item); 
8 } 
9 /* output 
10 0 
11 1 
12 2 
13 */ 
14 
如果用for each..in返回的将是:

1 /* output 
2 Jane 
3 Susan 
4 John 
5 */ 
6

<think>我们注意到用户提供的引用中包含VB.NET代码片段,特别是关于ForEach循环的使用。用户当前询问的是“vb.netforeachintegerinarraynextusage”,结合之前的对话历史(关于C#的foreach),用户可能在VB.NET中使用ForEach循环时遇到了问题,尤其是在遍历整数数组时如何使用。根据引用[1][3]中的代码,我们可以看到VB.NET中ForEach循环的典型用法:-引用[1]:使用For循环(不是ForEach)来初始化文本框数组。-引用[3]:使用ForEach循环遍历NotesDocument中的Items集合。在VB.NET中,遍历数组的ForEach循环基本语法为:```ForEach元素变量In数组&#39;循环体Next[元素变量]```具体到整数数组,我们可以这样写:```vb.netDimnumbers()AsInteger={1,2,3,4,5}ForEachnumAsIntegerInnumbers&#39;使用num,例如:Console.WriteLine(num)Next```注意:1.在循环中,元素变量(如上面的num)是只读的,不能通过它直接修改数组元素。如果需要修改元素,应该使用传统的For循环(基于索引)。2.Next关键字后面可以跟元素变量名,也可以省略。在嵌套循环时建议写上变量名以增加可读性。对比引用[3]的代码:```vb.netForEachitem0Indoc.Itemsi+=1&#39;...其他操作Next&#39;这里没有指定变量名,是允许的```因此,对于整数数组的遍历,我们可以给出如下示例:```vb.net&#39;声明并初始化一个整数数组DimintegerArray()AsInteger={10,20,30,40,50}&#39;使用ForEach循环遍历ForEachnumberAsIntegerInintegerArray&#39;打印每个元素Console.WriteLine(number)Nextnumber&#39;这里明确写上了number,也可以只写Next```常见错误:-在循环体内试图修改循环变量(number)会导致编译错误。-数组未初始化或为Nothing会导致运行时异常。如果需要在遍历过程中修改数组元素,可以使用For循环:```vb.netForindexAsInteger=0TointegerArray.Length-1integerArray(index)=integerArray(index)*2&#39;修改元素Next```最后,根据引用[2],我们注意到在并发环境下修改共享数据(如数组)需要考虑线程安全,但这超出了当前问题的范围。[^1]:引用[1]中的代码展示了For循环的使用,但用户询问的是ForEach。[^2]:引用[2]提到了变量访问的线程安全问题,与循环本身关系不大。[^3]:引用[3]中的代码演示了ForEach循环遍历集合的用法。§§相关问题§§1.如何修改数组元素的值?2.ForEach循环For循环在VB.NET中的性能差异?3.遍历多维数组时ForEach循环的行为是怎样的?</think> 在 VB.NET 中,`For Each` 循环是遍历数组或集合的高效方式。以下是针对 `Integer` 数组的正确使用方法及注意事项: ### VB.NET 中遍历整数数组的语法 ```vb.net Dim numbers() As Integer = {1, 2, 3, 4, 5} &#39; 声明并初始化整数数组 &#39; 使用 For Each 遍历 For Each num As Integer In numbers &#39; 对每个元素操作 Console.WriteLine($"当前数值: {num}") Next num &#39; 显式指定结束变量名(可选) ``` #### 核心特点: 1. **元素只读性** 循环变量 `num` 是数组元素的副本,修改它不会改变原数组: ```vb.net For Each num As Integer In numbers num = num * 2 &#39; 无效!不会改变原数组 Next ``` 2. **迭代对象约束** 被遍历对象必须实现 `IEnumerable` 接口(数组、List 等自动满足)[^3]。 3. **使用建议** - 循环结束时可以指定变量名(`Next num`)增加可读性 - 避免在循环内修改数组(使用索引式 `For` 循环替代) ### 使用示例:计算数组总 ```vb.net Dim values() As Integer = {10, 20, 30, 40} Dim total As Integer = 0 For Each value As Integer In values total += value &#39; 正确:读取原始值 &#39; value = 0 &#39; 错误:禁止修改 Next Console.WriteLine($"总: {total}") &#39; 输出:总:100 ``` ### 与 `For` 循环的关键区别 | 特性 | `For Each` 循环 | 传统 `For` 循环 | |--------------|-----------------------------|---------------------------| | 需要索引 | 否 | 是 | | 元素可修改性 | 只读 | 可读写 | | 迭代范围控制 | 自动遍历所有元素 | 需手动指定范围 | | 适用对象 | 所有实现 `IEnumerable` 的类型 | 需支持索引访问的类型 | > 注:根据引用[2],在并发环境中操作共享数组时,建议使用同步锁(但会降低性能)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值