Zig 循环

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Zig 循环

在 Zig 中,循环结构包括 while 循环和 for 循环。每种循环都有其特定的语法和用法。下面详细介绍这两种循环结构,包括其语法、说明和实例。

1、while 循环

语法

while (condition) : (increment) {

   // code block

}

  • condition:一个布尔表达式,只要它为 true,循环就会继续执行。
  • increment(可选):一个在每次循环结束后执行的表达式。

说明

while 循环在每次迭代前检查条件。如果条件为 true,则执行循环体中的代码。循环体执行完毕后,执行 increment 表达式(如果有)。然后再次检查条件,直到条件为 false

实例

实例

const std = @import("std");


pub fn main() void {

   var i: i32 = 0;

   while (i < 5) : (i += 1) {

       std.debug.print("i: {}\n", .{i});

   }

}

解析:

  • 初始化变量 i 为 0。
  • 只要 i 小于 5,循环体就会执行。
  • 每次循环结束后,i 自增 1。

代码编译执行结果为:

i: 0

i: 1

i: 2

i: 3

i: 4

2、for 循环

语法

for (collection) |item, index| {

   // code block

}

  • collection:一个数组、切片或其他可迭代的集合。
  • item:在每次迭代中,集合的当前元素。
  • index(可选):当前元素的索引。

说明

for 循环用于遍历一个集合中的每个元素。在每次迭代中,集合的当前元素被赋值给 item,并执行循环体中的代码。

实例

实例

const std = @import("std");


pub fn main() void {

   const array = [5]i32{ 1, 2, 3, 4, 5 };

   var index: usize = 0; // 索引变量需要声明类型

   for (array) |item| {

       std.debug.print("index: {}, item: {}\n", .{ index, item });

       index += 1; // 更新索引

   }

}

解析:

  • 定义了一个包含 5 个整数的数组。
  • 使用 for 循环遍历数组中的每个元素,并将元素值赋给 item,索引赋给 index
  • 在循环体中,打印每个元素的值和索引。

代码编译执行结果为:

index: 0, item: 1

index: 1, item: 2

index: 2, item: 3

index: 3, item: 4

index: 4, item: 5

3、continuebreak

语法

  • continue:跳过当前迭代并继续下一次迭代。
  • break:终止循环。

说明

continue 用于跳过当前迭代中剩余的代码,并立即开始下一次迭代。break 用于终止整个循环。

实例

实例

const std = @import("std");


pub fn main() void {

   var i: i32 = 0;

   while (i < 10) : (i += 1) {

       if (i == 5) {

           continue; // 跳过 i 等于 5 的那次迭代

       }

       if (i == 8) {

           break; // 终止循环

       }

       std.debug.print("i: {}\n", .{i});

   }

}

解析:

  • i 等于 5 时,continue 跳过该次迭代。
  • i 等于 8 时,break 终止循环。

代码编译执行结果为:

i: 0

i: 1

i: 2

i: 3

i: 4

i: 6

i: 7

5、嵌套循环

语法

for (outer_collection) |outer_item| {

   for (inner_collection) |inner_item| {

       // code block

   }

}

说明

在一个循环体内包含另一个循环称为嵌套循环。外层循环的每次迭代中,都会执行内层循环。

实例

实例

const std = @import("std");


pub fn main() void {

   // 声明一个包含三个字符串的数组

   const letters = [_][]const u8{ "A", "B", "C" };

   // 遍历数组

   for (letters) |letter| {

       var count: i32 = 0; // 声明计数器

       // 使用 while 循环来打印每个字母和计数

       while (count < 3) : (count += 1) {

           std.debug.print("{s} - {}\n", .{ letter, count });

       }

   }

}

解析:

  • 外层 for 循环遍历字母数组。
  • 内层 while 循环执行 3 次,打印字母和计数。

代码编译执行结果为:

A - 0

A - 1

A - 2

B - 0

B - 1

B - 2

C - 0

C - 1

C - 2

6、更多循环

无限循环

可以使用 while 循环创建一个无限循环,只要条件始终为真:

实例

pub fn main() void {

   while (true) {

       // 代码块

       // 必须包含某种退出机制,否则程序将永远运行

   }

}

范围循环

Zig 还允许你使用范围来循环,这在某些情况下可以简化代码:

实例

pub fn main() void {

   for (0..10) |i| {

       std.debug.print("i: {}\n", .{i});

   }

}

标签循环

Zig 支持标签循环,允许你命名循环,这在嵌套循环中非常有用:

实例

pub fn main() void {

   loop: while (true) {

       while (true) {

           std.debug.print("Inside nested loop\n");

           break :loop; // 退出外部循环

       }

   }

}

目录
相关文章
|
9天前
|
编译器
Zig 流程控制
Zig 流程控制
17 3
|
9天前
|
C语言
Zig 运算符
Zig 运算符
22 1
|
9天前
|
编译器
Zig 函数
Zig 函数
16 1
|
3月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
|
6月前
递归方法来计算二叉树的双分支节点个数
递归方法来计算二叉树的双分支节点个数
|
6月前
|
Java 程序员
for循环语句(详解+典例)
for循环语句(详解+典例)
133 0
|
Rust JavaScript 前端开发
Zig
Zig 是一门系统编程语言,旨在提供一种简单、安全且高效的方式来构建软件。它的设计受到了 Rust、C 和 C++ 的影响,但与这些语言相比,Zig 更加简单易用。Zig 的语法和抽象级别使得它易于学习和使用,同时它还提供了许多现代编程语言的功能,如高级类型、模块化编程和内存安全等。
254 6
剑指offer_递归与循环---矩形覆盖
剑指offer_递归与循环---矩形覆盖
81 0
剑指offer_递归与循环---跳台阶
剑指offer_递归与循环---跳台阶
61 0