ArrayList 是一種動態的數組容器,可以儲存相同型別、不定長度的資料(執行期分配),類似 Rust 中的 Vec<T>
。
基礎
ArrayList 是由標準庫提供的。由於是動態分配的型別,所以要使用它的話需要透過 Allocator 來分配,並且也需要 defer 做好釋放資源的處理。只要系統可以成功分配空間,ArrayList 的長度就可以一直加。使用 items
欄位存取成員。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const std = @import("std"); const print = std.debug.print; const ArrayList = std.ArrayList;
pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit();
const allocator = gpa.allocator(); var list = ArrayList(i8).init(allocator); defer list.deinit();
try list.append(1); try list.append(2); try list.append(-3);
print("{}, {}, {}\n", .{ list.items[0], list.items[1], list.items[2] }); }
|
for
其成員也可以用 for
迴圈處理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const std = @import("std"); const print = std.debug.print; const ArrayList = std.ArrayList;
pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit();
const allocator = gpa.allocator(); var list = ArrayList(i8).init(allocator); defer list.deinit();
try list.append(1); try list.append(2); try list.append(-3);
for (list.items) |item| { print("{}, ", .{item}); } }
|
型別
使用 @TypeOf()
查看具體型別。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const std = @import("std"); const print = std.debug.print; const ArrayList = std.ArrayList;
pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit();
const allocator = gpa.allocator(); var list = ArrayList(i8).init(allocator); defer list.deinit();
try list.append(1); try list.append(2); try list.append(-3);
print("{}\n", .{@TypeOf(list)}); print("{}", .{@TypeOf(list.items)}); }
|
1 2
| array_list.ArrayListAligned(i8,null) []i8
|
參考
本文以 Zig 0.13.0
為主。並同時發佈在: