如何在 Lua 的键值对表中弹出/删除下一个项目(任何)?
Posted
技术标签:
【中文标题】如何在 Lua 的键值对表中弹出/删除下一个项目(任何)?【英文标题】:How to pop/remove the next item (any) in a key-value-pair table in Lua? 【发布时间】:2013-12-27 11:42:03 【问题描述】:在 Lua 中,如何弹出/删除键值对表中的下一项(任何顺序)?
这是否可能无需使用pairs
进行迭代?
【问题讨论】:
键的索引是基于还是基于关联? 关联我认为 - 即“this”=23、“that”=234 等 什么下一个项目?你能举个例子来说明你正在尝试做什么吗?无论如何,要删除表条目,只需执行t[k]=nil
,其中t
包含表,k
包含键。
【参考方案1】:
有一个原始函数next
,可以调用next(t,k)
,其中k
是表t
的一个键,返回表中的下一个键,顺序任意,关联的值用这把钥匙。
如果k
是nil
,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
【讨论】:
【参考方案2】:全局函数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")
如果你多次运行demo,你可能会看到表格顺序的随意性。
【讨论】:
以上是关于如何在 Lua 的键值对表中弹出/删除下一个项目(任何)?的主要内容,如果未能解决你的问题,请参考以下文章
Dart/Flutter - 如何删除 List 中 Map 元素的键值对?