【发布时间】: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'等来修复它。
我需要知道如何在 lua 中检索表的键集。例如,如果我有下表:
tab = {}
tab[1]='a'
tab[2]='b'
tab[5]='e'
我想检索一个如下所示的表:
keyset = {1,2,5}
【问题讨论】:
tab的代码不是Lua代码,也就是不能编译。您可以使用[1]='a'等来修复它。
local keyset={}
local n=0
for k,v in pairs(tab) do
n=n+1
keyset[n]=k
end
请注意,您不能保证keyset 中的任何订单。如果您希望键按排序顺序排列,则将keyset 与table.sort(keyset) 排序。
【讨论】:
table.insert(keyset, k)
table.insert 每次迭代都需要计算表的长度,所以比较慢。使用一个非常简单的基准来测量 n=n+1; keyset[n]=k 与 table.insert(keyset, k) 的 10000 次迭代,结果如下:n:0.76s,table.insert:1.34s
table.insert 不需要计算表格的长度(以任何有意义的方式)。严格充当列表的表在内部维护缓存长度。但是table.insert 仍然较慢(正如您所提到的),但这仅仅是因为函数调用开销等恒定因素。特别是,table.insert 不应该越来越慢。
keyset[#keyset+1] = k。
local function get_keys(t)
local keys={}
for key,_ in pairs(t) do
table.insert(keys, key)
end
return keys
end
【讨论】: