Foreach迴圈
Foreach 迴圈(foreach loop)是電腦程式語言中的一種控制流程陳述式,通常用來迴圈遍歷陣列或集合中的元素。
程式範例
C#
以下代碼用於迴圈列印名稱為myArray的整型陣列中的每個元素。[1]
foreach (int x in myArray)
{
Console.WriteLine(x);
}
C#不允許在foreach迴圈中改變陣列或集合中元素的值(註:成員的值不受影響),如以下代碼將無法通過編譯。
foreach (int x in myArray)
{
x++; //错误代码,因为改变了元素的值
Console.WriteLine(x);
}
如果要讓自訂的資料類型支援foreach迴圈,則該類型必須實現IEnumerable<T>介面,且存在對應此列表的IEnumerator<T>實現。 實際上,在.Net的底層(IL語言層面)而言,
foreach (var x in list) // x的类型为T
{
...
}
等價於如下代碼:
using (var iterator = list.GetEnumerator()) // iterator的类型为IEnumerator<T>
{
while ( iterator.MoveNext() )
{
var x = iterator.Current();
... // 本段代码中禁止修改x的值——编译器会报错
}
}
它只是為了讓用戶更加易於使用的等價描述形式。
Java
Java語言從JDK 1.5.0開始引入foreach迴圈。[2]
以下代碼用於迴圈列印myArray陣列中的每個元素,java中的foreach迴圈使用for關鍵字,而非foreach。
for (int x : myArray){
System.out.println(x);
}
與C#不同的是,Java中執行以下代碼不會編譯出錯,但是實際陣列中的元素不會被修改。
for (int x : myArray){
x++;
System.out.println(x);
}
C++
C++11擴展for的用法,增加了foreach功能,語法和Java一樣。
for (int x : myArray){
cout << x << endl;
}
同時也有C++求值策略的功能,可以傳參考。
for (int& x : myArray){
x = x * x;
}
for (int x : myArray){
cout << x << endl;
}
參考資料
- ^ foreach、in (C# 參考). msdn.microsoft.com. [2015-10-16]. (原始內容存檔於2015-01-12).
- ^ The For-Each Loop. docs.oracle.com. [2015-10-16]. (原始內容存檔於2015-06-22).