for 是一種基於可迭代(Iterate)陣列的迴圈。
Zig 的 for 是比較接近如 Python 這種直接針對可迭代的迴圈,而不是傳統 C 的那種針對數值範圍及條件的 for。
for 可以直接使用陣列或切片迭代,並且使用 Capture |v| 來取得值。
const print = @import("std").debug.print;
pub fn main() void {
    const number_set = [_]u8{ 1, 3, 4, 5, 7, 8 };
    for (number_set) |num| {
        print("{}, ", .{num});
    }
}
1, 3, 4, 5, 7, 8,
如果除了數值還需要索引值 Index,可以這樣寫:
const print = @import("std").debug.print;
pub fn main() void {
    const number_set = [_]u8{ 1, 3, 4, 5, 7, 8 };
    for (number_set, 0..) |num, index| {
        print("Value{}: {}, ", .{ index, num });
    }
}
Value0: 1, Value1: 3, Value2: 4, Value3: 5, Value4: 7, Value5: 8,
如果你想要基於陣列或切片數量的 Index,但又用不到其數值本身,可以以底線 _ 明確捨棄。
const number_set = [_]u8{ 1, 3, 4, 5, 7, 8 };
for (number_set, 0..) |_, index| {
    print("Value{}, ", .{ index });
}
如果只需要單純的數值範圍,可以直接使用範圍語法,不用另外建立陣列。範圍語法爲 S..E,爲從 S 開始遞增的到 E(不包含)。
const print = @import("std").debug.print;
pub fn main() void {
    for (1..6) |i| {
        print("{}, ", .{i});
    }
}
1, 2, 3, 4, 5,
for 和 while 一樣支援 break 和 continue,其用法效果也相同,這裡就不多贅述了。
本文以 Zig 0.13.0 爲主。並同時發佈在: