如何在Lua中的键值对表中弹出/删除下一项(任何)?

时间:2013-12-10 04:45:02

标签: lua lua-table

在Lua中,如何在键值对表中弹出/删除下一项(任何顺序)?

这是否可行,而无需使用pairs进行迭代?

2 个答案:

答案 0 :(得分:4)

有一个原始函数next,你可以调用next(t,k),其中k是表t的一个键,返回表中的下一个键,in任意顺序,以及与此键关联的值。

如果knil,则next(t,k)会返回第一个元素(如果有)。因此,您可以通过调用next(t,nil)来迭代表,并在下一个键为nil时结束。

这是一个演示next的使用的简单示例:

local t = {a = "va", b = "vb", c = "vc"}

local k,v = next(t,nil)
print(k,v)
k,v = next(t,k)
print(k,v)
k,v = next(t,k)
print(k,v)
k,v = next(t,k)
print(k,v)

输出:

a       va
c       vc
b       vb
nil     nil

答案 1 :(得分:1)

全局函数next在这里很有用。一般来说,文档很好地解释了它。要迭代使用它,这是“关键”:

  

您可以......修改现有字段。特别是,你可以清楚   现有领域。

简单的弹出功能:

 -- removes and returns an arbitrary key-value pair from a table, otherwise nil
 local pop = function (t)
    local key, value = next(t)
    if key ~= nil then
        t[key] = nil
    end
    return key, value
end

演示:

local test = { "one", c = "see", "two", a = "ayy", b = "bee", "three" }
assert(next(test), "Table was expected to be non-empty")

local key, value = pop(test)
while key do
   print(key, value)
   key, value = pop(test)
end

assert(not next(test), "Table was expected to be empty")

如果多次运行演示,您可能会看到表序列的随意性。