foreach(循环语句)

foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。能够应用的编程语言类别:Java、C#、PHP、D语言(Phobos库)。foreach语句是c#中新增的循环语句,他对于处理数组及集合等数据类型特别方便。foreach语句的一般语法格式如下:foreach(数据类型标识符in表达式){循环体}。

语句形式

此语句的形式如下:

foreach (type identifier in expression) statement

其中:

type

identifier的类型。

identifier

表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。

expression

对象集合或数组表达式。集合元素的类型必须可以转换为identifier类型。请不要使用计算为null的表达式。

而应计算为实现IEnumerable的类型或声明GetEnumerator方法的类型。在后一种情况中,GetEnumerator应该要么返回实现IEnumerator的类型,要么声明IEnumerator中定义的所有方法。

statement

要执行的嵌入语句。

语句语法

java

格式:

C#:foreach(元素类型type元素变量x:遍历对象obj)

{

引用了x的java语句;

}

在java中的语法:for(typex:collection){

}

实例:

public class Test{

public static void main(String[] args)

{

int[] a={1,2,3};

for (inti:a)

System.out.print(i+",");

}

}

C#

int[] arr={1,2,3};//遍历数组当前只是访问集合中的元素

foreach(int i in arr)

{

System.Console.WriteLine(i);

}

输出结果为:

1

2

3

C#中:foreach针对引用类型地址的访问

如果当前方法中在访问当前引用类型的集合,在新调用的方法中在修改当前集合的地址时,当前地址会依然存在,不符合C#中的对象的生命周期,一旦当前文件的引用地址被替换掉了,当前对象的空间就消失废弃了,但是,foreach(){}会保留原先的集合的地址<地址应该也是有生命周期的>foreach和for就不一样!

c#中:foreach举例

using System;

class Number

{

static void Main()

{

int evenNum=0,oddNum=0;

//定义并初始化一个一维数组

int[] arr=new int[]{13,16,15,78,26,65,39};

foreach(int k in arr)//提取数组中的整数

{

if(k%2==0)//判断是否为偶数

evenNum++;

else

oddNum++;

}

Console.WriteLine("偶数个数:{0}奇数个数:{1}",evenNum,oddNum);

Console.ReadKey();

}

}

php

php4引入了foreach结构,和Perl以及其他语言很像。这只是一种遍历数组简便方法。foreach仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

foreach(array_expressionas$value)statement

第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

foreach(array_expressionas$key=>$value)statement

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量$key。

自php5起,还可能遍历对象。注:当foreach开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在foreach循环之前调用reset()。

注:除非数组是被引用,foreach所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被each()结构改变,对返回的数组单元的修改也不会影响原数组。不过原数组的内部指针的确在处理数组的过程中向前移动了。假定foreach循环运行到结束,原数组的内部指针将指向数组的结尾。

自php5起,可以很容易地通过在$value之前加上&来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。

$arr=array(1,2,3,4);

foreach($arr as &$value)

{

$value=$value*2;

}

//$arr is now array(2,4,6,8)

?>

此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。

注:foreach不支持用“@”来抑制错误信息的能力。

用户可能注意到了以下的代码功能完全相同:

/n";}foreach($arr as $value){echo"Value:$value

/n";}?>

以下代码功能也完全相同:

/n";}foreach($arras$key=>$value){echo"Key:$key;Value:$value

/n";}?>

示范用法的更多例子:

$v./n";$i++;}/*foreachexample3:keyandvalue*/$a=array("one"=>1,"two"=>2,"three"=>3,"seventeen"=>17);foreach($aas$k=>$v){echo"/$a[$k]=>$v./n";}/*foreachexample4:multi-dimensionalarrays*/$a=array();$a="a";$a="b";$a="y";$a="z";foreach($aas$v1){foreach($v1as$v2){echo"$v2/n";}}/*foreachexample5:dynamicarrays*/foreach(array(1,2,3,4,5)as$v){echo"$v/n";}?>

$arr=array(1,2,3,4,'a','b',"c");

例子1

foreach($arr as $v)

{

echo$v."";

}

例子2

foreach($arr as $k=>$v)

{

echo"[$k]=>$v

";

}

D语言

foreach迭代语句

用法1

foreach(int ival;A..B){}定义一个整形变量ival之后依次把ival变成A至B-1(右开区间)

import std.stdio;

void main()

{

foreach(ival;2..5)

{

writeln(ival);

}

}//结果依次输出234

用法2

foreach(int ival;arr){}arr是数组这个循环将数组中的每一个元素依次绑定到ival中

import std.stdio;

void main()

{

int arr;

int num=0;

foreach(ival;arr)

{

arr[num]=++num;

writeln(ival);

}

}//输出012

用法3

foreach(int index,ref ival;arr){}第一个变量表示数组arr的索引ival表示数组下标为index对应的值加了ref关键字表示ival与数组的值相关联(ival改变数组值也相应改变…类似于C++的引用)

import std.stdio;

void main()

{

int[] arr=new int[5];

foreach(index,ref ival;arr)//index是数组下标索引ival是对应的索引值默认都为0arr是数组名

{

ival=index+1;

writeln(arr[index]);

}

}//输出12345

该文章由作者:【威尔士亲王】发布,本站仅提供存储、如有版权、错误、违法等相关信息请联系,本站会在1个工作日内进行整改,谢谢!

发表回复

登录后才能评论