假设我想存储一个元素列表。包括一些零值。值的位置很重要,我需要表示列表中给定位置没有值。
这里有一个问题:
a = {1,2,3,nil,4}
for k,v in ipairs(a) do
print(k,v)
end
print(a[4])
print(a[5])
for 循环只会打印元素 1,2 和 3。它在 nil 处停止。第一个打印语句打印 nil,但我不确定它是否实际存储在表中。 (谁知道?)第二个打印语句按预期打印 4。
那么问题来了:如何在表中表示元素列表,并有效地遍历它们?鉴于上述条件,例如持仓意义重大,部分持仓为“空”。换句话说:没有值(value),但在那个位置没有那个值(value)是有意义的。
最佳答案
这是模块“null.lua”
local function null(...)
local t, n = {...}, select('#', ...)
for k = 1, n do
local v = t[k]
if v == null then t[k] = nil
elseif v == nil then t[k] = null
end
end
return (table.unpack or unpack)(t, 1, n)
end
_G.null = null
使用
null()
作为编码器和解码器require("null")
a = {null(1,2,3,nil,4)}
-- the same could be done element-by-element
-- a = {null(1),null(2),null(3),null(nil),null(4)}
for k,v in ipairs(a) do
v = null(v)
print(k,v)
end
print(null(a[4]))
print(null(a[5]))
关于lua - 如何在表格中表示 nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40441508/