LUA 中数组操作的时间复杂度

Time complexity of array manipulations in LUA

我正在使用 ComputerCraft(适用于 Minecraft)发现 Lua,我需要 2 个功能:

这些函数各自的复杂度是多少?我特别需要一种 O(1) 方法来弹出 table.

的最后一个元素

抱歉英语不好,提前致谢。

#foo 是 O(n);它遍历 able 直到找到 nil,然后 returns 它之前的最后一个索引。将最后一个元素设置为 nil 确实是弹出的“正确”方式,因为 nil 是 table 长度的定义方式,除非您使用 getn/setn (在 Lua 5.1 并在 Lua 5.2).

中删除

使其成为 O(1) 的正确方法是将长度存储在别处,并在每次向 table 添加或从中删除内容时更新它。

根据lua 5.4 reference(第 3.4.7 节),#t 是对数的,不是线性的。 它是从 lua 5.3 开始明确编写的,但在 lua 5.1 和 5.2 中可能也是如此。它在 luajit.

中也是对数的

但是上面的另一个答案已经说过,如果你想要它是 O(1),你需要手动记录长度。