跳转到内容

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
华夏公益教科书