D語言入門指南/條件語句和迴圈/簡單迭代
外觀
foreach語句提供了多種方法來迭代陣列,無論是正向還是反向。它接受兩個引數:一個變數名,用於儲存陣列中的元素,以及要遍歷的陣列。之後是需要執行的語句。可以獲取用於查詢陣列中特定位置的索引。在以下示例中,我們初始化一個整數陣列,並使用foreach和foreach_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之後只有一條語句,則不需要使用括號。值得注意的是,在index和value之間使用逗號而不是分號。
程式碼輸出以下內容
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進行迴圈是在值的副本上進行的,這意味著對其進行的更改不會反映到原始值中。如果我們想改變原始陣列的值,可以透過新增型別修飾符out或ref(等同於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