Dart 循环
最后修改日期:2024 年 1 月 28 日
在本文中,我们将介绍如何在 Dart 语言中创建循环。我们使用 for 和 while 语句来创建循环。此外,我们还将介绍 break 和 continue 语句。
循环
for
和 while
语句用于创建循环。break
和 continue
语句用于改变循环的执行。
循环用于多次执行语句或遍历容器。
Dart while 循环
while
语句是一个控制流程语句,允许根据给定的布尔条件重复执行代码。
这是 while
循环的一般形式
while (expression) { statement; }
while
关键字执行大括号括起来的块内的语句。只要表达式的计算结果为 true,就会执行这些语句。
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 循环也包含三个阶段:初始化、条件和代码块执行,以及增量。
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
属性获取其大小。
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。
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
简化了遍历数据集合的过程。它没有显式计数器。它逐个遍历数组或集合,并将当前值复制到构造中定义的变量。
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 循环的每个周期执行。
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 语句可用于终止由 while
和 for
语句创建的循环的执行。
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 整除的数字列表。
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 教程。