Lua 中 table 用作数组的时候,nil 值会打断数组下标的连续性,怎么破?

在 javascript 中,可以写

var arr =

这个时候 arr.length = 6, arr = null

但是在 lua 中

local arr = {}
table.insert(arr, 0)
table.insert(arr, 1)
table.insert(arr, 2)
table.insert(arr, nil)
table.insert(arr, nil)
table.insert(arr, 5)

此时
print(#arr) – 4
print(arr) – 5

我所期望的是一种可以允许 nil 的 数组,应该怎么实现呢?

table.setn 在 5.0.2 里面被移除了。

local arr = {}
table.insert(arr, 1, 0)
table.insert(arr, 2, 1)
table.insert(arr, 3, 2)
table.insert(arr, 4, nil)
table.insert(arr, 5, nil)
table.insert(arr, 6, 5)

print(arr)

print(“table.nums : “, table.nums(arr))
print(“table.getn :”, table.getn(arr))
print(“table.maxn :”, table.maxn(arr))
print(”# :”, #arr)


nil
table.nums : 4
table.getn : 3
table.maxn : 6

: 3

~~ MARK ~~

不要用nil去赋值,用一个特殊的数字去赋值,比如0或者-1

Mark~~~~~~~~~~

table.getn(arr) 怎么返回的是3 lua小白 麻烦问下啊

百度下 知道了
table.getn(t)等价于 #t但是它计算的是数组元素。不包括hash 键值。而且数组是以第一个nil元素来判断数组结束。

这点我也感觉特别可恶,而且增删一个元素的时候想遍历操作也显得很麻烦。
无序没有有序的遍历效率高。

------遍历操作
local count = 0
local arr = {}
for v in pairs(arr) do
arr:doSomeThing()
count = count + 1
end
------长度
print(count)