Skip to content

[Day-16]Zig:for 迴圈

發佈

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

如果除了數值還需要索引值 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,

break 和 continue

forwhile 一樣支援 breakcontinue,其用法效果也相同,這裡就不多贅述了。

參考

本文以 Zig 0.13.0 為主。並同時發佈在:


[Day-17]Zig:錯誤處理 Error
[Day-15]Zig:while 迴圈

留言可能不會立即顯示。若過了幾天仍未出現,請 Email 聯繫:)