ZetCode

Dart 循环

最后修改日期:2024 年 1 月 28 日

在本文中,我们将介绍如何在 Dart 语言中创建循环。我们使用 for 和 while 语句来创建循环。此外,我们还将介绍 break 和 continue 语句。

循环

forwhile 语句用于创建循环。breakcontinue 语句用于改变循环的执行。

循环用于多次执行语句或遍历容器。

Dart while 循环

while 语句是一个控制流程语句,允许根据给定的布尔条件重复执行代码。

这是 while 循环的一般形式

while (expression)
{
    statement;
}

while 关键字执行大括号括起来的块内的语句。只要表达式的计算结果为 true,就会执行这些语句。

main.dart
void main() {
  int i = 0;
  int sum = 0;

  while (i < 10) {
    i++;
    sum += i;
  }

  print(sum);
}

在代码示例中,我们计算某个数字范围内值的总和。

while 循环有三个部分。初始化、测试和更新。语句的每次执行都称为一个周期。

int i = 0;

我们初始化 i 变量。它用作计数器。

while (i < 10) {
   ...
}

while 关键字后面的圆括号内的表达式是第二阶段:测试。只要表达式的计算结果为真,循环体内的语句就会被执行。当表达式的计算结果为假时,循环终止。

i++;

这是 while 循环的最后第三个阶段:更新。我们递增计数器。请注意,不正确处理 while 循环可能导致无限循环。

$ dart main.dart
55

Dart 经典 for 循环

经典 for 循环源自 C 编程语言。for 循环也包含三个阶段:初始化、条件和代码块执行,以及增量。

main.dart
void main() {
  var sum = 0;

  for (int i = 0; i < 10; i++) {
    sum += i;
  }

  print(sum);
}

在此示例中,我们对 0..9 的值求和并将结果打印到控制台。

for (int i = 0; i < 10; i++) {
  sum += i;
}

在第一个阶段,我们将计数器 i 初始化为零。此阶段仅执行一次。接下来是条件 i < 10。如果满足条件,则执行 for 块内的语句。在第三个阶段,计数器增加。现在我们重复阶段 2 和 3,直到条件不满足并且 for 循环结束。在我们的例子中,当计数器 i 等于 10 时,for 循环停止执行。

Dart for 循环 List

for 循环可用于遍历列表或映射等容器。从列表的 length 属性获取其大小。

main.dart
void main() {
  final planets = [
    "Mercury",
    "Venus",
    "Earth",
    "Mars",
    "Jupiter",
    "Saturn",
    "Uranus",
    "Pluto"
  ];

  for (int i = 0; i < planets.length; i++) {
    print(planets[i]);
  }

  print("In reverse:");

  for (int i = planets.length - 1; i >= 0; i--) {
    print(planets[i]);
  }
}

我们有一个包含太阳系行星名称的列表。使用两个 for 循环,我们按升序和降序打印值。

for (int i = 0; i < planets.length; i++) {
  print(planets[i]);
}

列表通过零基索引访问。第一个项目索引为 0。因此,i 变量初始化为零。条件检查 i 变量是否小于列表的长度。在最后阶段,i 变量递增。

for (int i = planets.length - 1; i >= 0; i--) {
  print(planets[i]);
}

此 for 循环以相反的顺序打印列表的元素。i 计数器初始化为列表大小。由于索引是零基的,最后一个元素的索引是列表大小-1。条件确保计数器大于或等于零。(列表索引不能为负数)。在第三步中,i 计数器减一。

$ dart main.dart
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Pluto
In reverse:
Pluto
Uranus
Saturn
Jupiter
Mars
Earth
Venus
Mercury

Dart for 循环 Map

for 循环可用于遍历 Map。

main.dart
void main() {
  final fruit = {1: 'Apple', 2: 'Banana', 3: 'Cherry', 4: 'Orange'};

  for (final key in fruit.keys) print(key);
  for (final value in fruit.values) print(value);

  for (final me in fruit.entries) {
    print("${me.key}: ${me.value}");
  }
}

在此示例中,我们使用 for 循环打印所有键、值和映射条目(键/值对)。

for (var key in fruit.keys) print(key);

在此 for 循环中,我们遍历所有映射键。如果 for 循环仅包含一条语句,我们可以将整个循环放在单行上。

$ dart main.dart 
1
2
3
4
Apple
Banana
Cherry
Orange
1: Apple
2: Banana
3: Cherry
4: Orange

Dart for/in 循环

for/in 简化了遍历数据集合的过程。它没有显式计数器。它逐个遍历数组或集合,并将当前值复制到构造中定义的变量。

main.dart
void main() {
  final vals = [1, 2, 3, 4, 5];
  for (final e in vals) {
    print(e * e);
  }
}

在此示例中,我们使用 for 范围遍历数字列表。

for (final e in vals) {
  print(e * e);
}

我们迭代数字列表。e 是一个临时变量,其中包含列表的当前值。for 语句遍历所有数字,并将它们的平方打印到控制台。

$ dart main.dart
1
4
9
16
25

Dart 嵌套 for 循环

For 语句可以嵌套;即,一个 for 语句可以放在另一个 for 语句内部。嵌套 for 循环的所有周期都针对外部 for 循环的每个周期执行。

main.dart
void main() {
  final a1 = ["A", "B", "C"];
  final a2 = ["A", "B", "C"];

  for (int i = 0; i < a1.length; i++) {
    for (int j = 0; j < a2.length; j++) {
      print(a1[i] + a2[j]);
    }
  }
}

在此示例中,我们创建了两个列表的笛卡尔积。

for (int i = 0; i < a1.length; i++) {
  for (int j = 0; j < a2.length; j++) {
    print(a1[i] + a2[j]);
  }
}

嵌套的 for 循环位于另一个父 for 循环内部。嵌套的 for 循环在父 for 循环的每个周期中完全执行。

$ dart main.dart
AA
AB
AC
BA
BB
BC
CA
CB
CC

Dart break 语句

break 语句可用于终止由 whilefor 语句创建的循环的执行。

main.dart
import 'dart:math';

void main() {
  const int MAX = 30;

  while (true) {
    var num = new Random().nextInt(MAX);
    print("$num");

    if (num == 22) {
      break;
    }
  }

  print("\n");
}

我们定义了一个无限 while 循环。我们使用 break 语句来跳出这个循环。我们从 1 到 30 中选择一个随机值。我们打印该值。如果该值等于 22,我们则结束无限 while 循环。

$ dart main.dart
21
4
20
20
22

Dart continue 语句

continue 语句用于跳过循环的一部分,并继续执行循环的下一次迭代。在下面的示例中,我们打印一个不能被 2 整除的数字列表。

main.dart
void main() {
  int num = 0;

  while (num < 1000) {
    num++;

    if ((num % 2) == 0) {
      continue;
    }

    print("$num");
  }

  print("\n");
}

我们使用 while 循环遍历数字 1..999。

if ((num % 2) == 0) {
  continue;
}

如果表达式 num % 2 返回 0,则该数字可以被 2 整除。执行 continue 语句,跳过循环的其余部分。在我们的例子中,跳过了循环的最后一条语句,并且数字没有被打印到控制台。然后开始下一次迭代。

来源

Dart 循环 - 语言参考

在本文中,我们介绍了 Dart 中的循环。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 Dart 教程