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 中的任何订单。如果您希望键按排序顺序排列,则将keysettable.sort(keyset) 排序。

【讨论】:

甚至没有理由在其中使用本地 n,您只需在循环内执行一行 table.insert(keyset, k) table.insert 每次迭代都需要计算表的长度,所以比较慢。使用一个非常简单的基准来测量 n=n+1; keyset[n]=ktable.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:检索表中的键列表的主要内容,如果未能解决你的问题,请参考以下文章

如何通过列表理解检索字典的键列表和值?

在使用表中的连接列值填充列表框时,如何检索相应的 ID 并传递值 onchange [关闭]

京东商品分类列表如何使用Golang+Lua应对亿级访问

如何使用单个查询联合从另一个表中检索到的表列表?

Lua5.4源码阅读—表

Lua实现面向对象