假设我想存储一个元素列表。包括一些零值。值的位置很重要,我需要表示列表中给定位置没有值。

这里有一个问题:

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/

10-12 17:45
查看更多