跳轉到內容

D語言入門指南/條件語句和迴圈/簡單迭代

來自 Wikibooks,開放的書籍,開放的世界

簡單迭代:foreach迴圈

[編輯 | 編輯原始碼]

foreach語句提供了多種方法來迭代陣列,無論是正向還是反向。它接受兩個引數:一個變數名,用於儲存陣列中的元素,以及要遍歷的陣列。之後是需要執行的語句。可以獲取用於查詢陣列中特定位置的索引。在以下示例中,我們初始化一個整數陣列,並使用foreachforeach_reverse對其進行迭代。您不需要為value指定型別。

import std.stdio;
 
int main()
{
    int[] arr = [ 1, 3, 5 ];

    foreach (value; arr)
        writefln("foreach: value = %d", value);

    foreach (index, value; arr)
    {
        writefln("foreach: index = %d, value = %d", index, value);
    }

    foreach_reverse (index, value; arr)
    {
        writefln("foreach_reverse: index = %d, value = %d", index, value);
    }

    return 0;
}

與之前章節中的if語句類似,如果foreach之後只有一條語句,則不需要使用括號。值得注意的是,在indexvalue之間使用逗號而不是分號。

程式碼輸出以下內容

foreach: value = 1
foreach: value = 3
foreach: value = 5
foreach: index = 0, value = 1
foreach: index = 1, value = 3
foreach: index = 2, value = 5
foreach_reverse: index = 2, value = 5
foreach_reverse: index = 1, value = 3
foreach_reverse: index = 0, value = 1

使用foreach進行迴圈是在值的副本上進行的,這意味著對其進行的更改不會反映到原始值中。如果我們想改變原始陣列的值,可以透過新增型別修飾符outref(等同於inout)來實現。前者只能寫入,後者可以讀取和寫入。如果您嘗試讀取一個out變數,它將被初始化。在陣列索引中新增型別修飾符會導致編譯錯誤。

  int[] arr = [ 1, 3, 5 ];
 
  foreach (ref value; arr)
  {
      value++;
  }

  foreach (key, inout value; arr)
  {
      value += 10; // Adds 10 to value
  }

  foreach (key, value; arr)
  {
      writefln("arr[%d] = %d", key, value);
  }

輸出

arr[0] = 12
arr[1] = 14
arr[2] = 16
華夏公益教科書