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