Remove ads

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的值——编译器会报错
  }
}

它只是為了讓用戶更加易於使用的等價描述形式。

Remove ads

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;
}

參考資料

參見

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.

Remove ads