假设我想存储一个元素列表。包括一些零值。值的位置很重要,我需要表示列表中给定位置处不存在值。
这里有一个问题:
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,但我不确定它是否实际存储在表中。 (谁知道呢?)第二个 print 语句按预期打印 4 - 。
那么问题来了:如何表示表中的元素列表,并有效地迭代它们?鉴于上述条件,例如仓位显着,部分仓位“空”。换句话说:没有价值,但是在那个位置没有那个价值是有意义的。
这是模块“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
Use 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]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)