欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

foreach

科普小知识2022-10-03 08:27:48
...

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

1、形式

此语句的形式如下:

foreach(typeidentifierinexpression)statement其中:

type

identifier的类型。

identifier

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

expression

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

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

statement

要执行的嵌入语句。

事例:

1

2

3

4

5

intarr=newint{0,1,2,3,4};

foreach(intiinarr)

{

Console.Write(i);

}

2、语法

java

格式:

C#:foreach(元素类型type元素变量x:遍历对象obj){引用了x的java语句;

}

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

}

实例:

1

2

3

4

5

6

7

8

publicclAssTest{

publicstaticvoidmain(Stringargs)

{

inta={1,2,3};

for(inti:a)

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

}

}

C#

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

1

2

3

4

foreach(intiinarr)

{

System.Console.WriteLine(i);

}

输出结果为:

1

2

3

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

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

}会保留原先的集合的地址foreach和for就不一样!

c#中:foreach举例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

usingSystem;

clAssNumber

{

staticvoidMain()

{

intevenNum=0,oddNum=0;

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

intarr=newint{13,16,15,78,26,65,39};

foreach(intkinarr)//提取数组中的整数

{

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之前加上&来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。

1

2

3

4

5

6

7

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

foreach($arras&$value){

$value=$value*2;

}

//$arrisnowarray(2,4,6,8)

?>

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

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

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

/n";}foreach($arras$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=>$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.

1

2

3

4

5

6

7

foreach($arras$v)

{

echo$v."";

}

2.

1

2

3

4

foreach($arras$k=>$v)

{

echo"=>$v
"
;

}

上一篇:USB插座

下一篇:定时插座

推荐阅读