0Pricing
Zig Academy · 课时

使用 ArrayList 管理动态列表

扩展由分配器支持的缓冲区。

使用 ArrayList 管理动态列表 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。

可增长的缓冲区

有时您事先不知道大小。std.ArrayList 是一种动态数组,会随着您添加项目而增长,并由分配器提供支持。📈

它是泛型的

ArrayList 是一种泛型类型:您只需指定一次元素类型,就能得到一个完全由该类型组成且具备完整类型安全性的列表。

const List = std.ArrayList(i32);

使用 init 创建

使用 init 创建列表,并将它用于增长的分配器传入其中。该分配器会在列表的整个生命周期内与列表关联。

var list = std.ArrayList(i32).init(allocator);

始终调用 deinit

列表拥有堆内存,因此要将 init 与 deinit 配对以释放内存。在 init 后立即使用 defer,可以让清理自动执行。

var list = std.ArrayList(i32).init(a);
defer list.deinit();

追加项目

使用 append 添加一个元素。它可能需要增大缓冲区,因此可能失败,也就需要使用 try 调用。

try list.append(7);

访问数据

当前内容存放在 .items 切片中。您可以像操作其他 Zig 切片一样读取、索引和遍历该切片。

for (list.items) |n| std.debug.print("{}\n", .{n});

长度与容量

长度是 list.items.len,表示您存储了多少个值。容量是预留的空间,可能更大,以避免频繁增长。

提前预留空间

如果您大致知道所需大小,请先调用 ensureTotalCapacity。一次性预留可以避免列表填满时反复重新分配。

try list.ensureTotalCapacity(100);

移除项目

使用 pop 移除最后一个元素,或按索引移除中间的元素。列表会缩短长度,但会保留容量。

const last = list.pop();

转移所有权

调用 toOwnedSlice 将缓冲区取出为普通切片。列表会变空,而您需要负责释放该切片。

const slice = try list.toOwnedSlice();

建立在基础之上

ArrayList 只是替您完成了 alloc、复制和 free。它展示了显式分配器配合整洁且可复用的类型能够实现多大的能力。✅

快速检查

回想一下,ArrayList 不再使用时,您必须做什么。

回顾

您已经学会,std.ArrayList 会借助分配器动态增长:使用 init,使用 try 调用 append,读取 .items,并在完成后始终调用 deinit。🎯

常见问题解答

「使用 ArrayList 管理动态列表」课时是免费的吗?

是的 — 「使用 ArrayList 管理动态列表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。

「使用 ArrayList 管理动态列表」这节课中我会学到什么?

扩展由分配器支持的缓冲区。 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Zig Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「使用 ArrayList 管理动态列表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Zig Academy 课中编写并运行代码吗?

能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为何 Zig 没有隐藏的内存分配
  2. 分配器接口
  3. alloc、free、create、destroy
  4. 使用 ArrayList 管理动态列表
← 返回 Zig Academy