【发布时间】:2010-12-18 01:21:02
【问题描述】:
我有一个用作 hashmap 的 lua 表,即带有字符串键:
local map = { foo = 1, bar = 2 }
我想“弹出”该表中由其键标识的元素。有一个table.remove() 方法,但它只需要删除元素的索引(即数字)而不是通用键。我希望能够做到table.remove(map, 'foo'),这是我实现它的方式:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
有没有更好的方法来做到这一点?
【问题讨论】:
-
+1 给这个非常有用的问题,因为你给出了我需要的“答案”;即使没有“更好”的方法。
-
在pair operator上下文中这样做安全吗?
-
@Pica 取决于您所说的安全,但您可以说
t = {1,2,3,4}; for k, v in pairs(t) do t[k] = nil; print(k, v); end,它会正常工作。 -
所以它不会破坏执行顺序,遗漏元素或执行元素两次?很抱歉在这件事上坚持不懈。在这个线程中并没有真正讨论 Pairs:stackoverflow.com/questions/12394841/…。找到了答案:lua-users.org/lists/lua-l/2012-07/msg00543.html 一切都保存了,除了成对添加元素到表格中。