foreach

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(type x : collection){
}
實例:
public class Test {
public static void main(String[] args)
{
int[] a = {1,2,3};
for(int i : 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();
}
foreach
foreach
}

php

php 4 引入了 foreach 結構,和 Perl 以及其他語言很像。這只是一種遍曆數組簡便方法。foreach 僅能用於數組,當試圖將其用於其它數據類型或者一個未初始化的變數時會產生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴展。
foreach (array_expression as $value) statement
第一種格式遍歷給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。
foreach (array_expression as $key => $value) statement
第二種格式做同樣的事,只除了當前單元的鍵名也會在每次循環中被賦給變數 $key。
自php 5 起,還可能遍歷對象。注: 當 foreach 開始執行時,數組內部的指針會自動指向第一個單元。這意味著不需要在 foreach 循環之前調用 reset()。
注: 除非數組是被引用,foreach 所操作的是指定數組的一個拷貝,而不是該數組本身。因此數組指針不會被 each() 結構改變,對返回的數組單元的修改也不會影響原數組。不過原數組的內部指針的確在處理數組的過程中向前移動了。假定 foreach 循環運行到結束,原數組的內部指針將指向數組的結尾。
自 php 5 起,可以很容易地通過在 $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 ($arr as $key => $value) { echo "Key: $key; Value: $value
/n";}?>
示範用法的更多例子:
$v./n"; $i++;}$a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17);foreach ($a as $k => $v) { echo "/$a[$k] => $v./n";}$a = array();$a = "a";$a = "b";$a = "y";$a = "z";foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2/n"; }}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()
{
intarr;
int num=0;
foreach(ival;arr)
{
arr[num] = ++num;
writeln(ival);
}
}//輸出0 1 2
用法3 foreach(int index,ref ival;arr){}第一個變數表示數組arr的索引 ival表示數組下標為index對應的值 加了ref關鍵字表示ival與數組的值相關聯(ival改變 數組值也相應改變...類似於C++的引用)
import std.stdio;
void main()
{
int[] arr=new int;
foreach(index,ref ival;arr)//index是數組下標索引ival是對應的索引值默認都為0 arr是數組名
{
ival = index+1;
writeln(arr[index]);
}
}//輸出1 2 3 4 5