For 循环 (for)

Zig 的 for 循环用于遍历数组、切片、元组等可迭代对象。

基本用法

const items = [_]i32{ 4, 5, 3, 4, 0 };
var sum: i32 = 0;

for (items) |value| {
    sum += value;
}

获取索引

如果需要索引,可以添加第二个捕获变量。

for (items, 0..) |value, index| {
    std.debug.print("Item {} is \n", .{index, value});
}

修改元素

要修改元素,必须捕获指针。

var items = [_]i32{ 1, 2, 3 };
for (&items) |*value| {
    value.* += 1;
}

多重迭代

for 循环可以同时遍历多个切片,只要它们的长度相同。

const items1 = [_]usize{ 1, 2, 3 };
const items2 = [_]usize{ 4, 5, 6 };
var sum: usize = 0;

for (items1, items2) |i, j| {
    sum += i + j;
}

标签 (Labels)

while 循环一样,for 循环也可以使用标签。

inline for

inline for 会在编译时展开循环。这对于类型元编程非常有用。

const types = [_]type{ i32, f32, u8 };
inline for (types) |T| {
    var x: T = 0;
    _ = x;
}

另请参阅: