lua:检索表中的键列表
Posted
技术标签:
【中文标题】lua:检索表中的键列表【英文标题】:lua: retrieve list of keys in a table 【发布时间】:2012-09-22 08:46:07 【问题描述】:我需要知道如何在 lua 中检索表的键集。例如,如果我有下表:
tab =
tab[1]='a'
tab[2]='b'
tab[5]='e'
我想检索一个如下所示的表:
keyset = 1,2,5
【问题讨论】:
你给tab
的代码不是Lua代码,也就是不能编译。您可以使用[1]='a'
等来修复它。
【参考方案1】:
local keyset=
local n=0
for k,v in pairs(tab) do
n=n+1
keyset[n]=k
end
请注意,您不能保证keyset
中的任何订单。如果您希望键按排序顺序排列,则将keyset
与table.sort(keyset)
排序。
【讨论】:
甚至没有理由在其中使用本地 n,您只需在循环内执行一行table.insert(keyset, k)
table.insert
每次迭代都需要计算表的长度,所以比较慢。使用一个非常简单的基准来测量 n=n+1; keyset[n]=k
与 table.insert(keyset, k)
的 10000 次迭代,结果如下:n
:0.76s,table.insert
:1.34s
@MichalKottman table.insert
不需要计算表格的长度(以任何有意义的方式)。严格充当列表的表在内部维护缓存长度。但是table.insert
仍然较慢(正如您所提到的),但这仅仅是因为函数调用开销等恒定因素。特别是,table.insert
不应该越来越慢。
你也可以使用keyset[#keyset+1] = k
。
抱歉,我刚刚重新检查了我的时间,毕竟它们都是线性缩放的。【参考方案2】:
local function get_keys(t)
local keys=
for key,_ in pairs(t) do
table.insert(keys, key)
end
return keys
end
【讨论】:
以上是关于lua:检索表中的键列表的主要内容,如果未能解决你的问题,请参考以下文章