iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

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 爲主。並同時發佈在:


上一篇
Zig:while 迴圈
下一篇
Zig:錯誤處理 Error
系列文
Zig 語言入門指南——聽説你是現代化的 C30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言