欢迎您 本站地址:  

Zig 循环

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

1、while 循环

语法

while (condition) : (increment) {
    // code block
}

说明

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: 1
i: 2
i: 3
i: 4

2、for 循环

语法

for (collection) |item, index| {
    // code block
}

说明

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; // 更新索引
    }
}

解析:

代码编译执行结果为:

index: 0, item: 1
index: 1, item: 2
index: 2, item: 3
index: 3, item: 4
index: 4, item: 5

3、continuebreak

语法

说明

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: 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 });
        }
    }
}

解析:

代码编译执行结果为:

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; // 退出外部循环
        }
    }
}
小库提示

扫描下方二维码,访问手机版。