【问题标题】:lua: retrieve list of keys in a tablelua:检索表中的键列表
【发布时间】: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 lua-table keyset


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2019-12-04
    • 2018-03-26
    相关资源
    最近更新 更多