lua:检索表中的键列表

ewo*_*wok 33 lua keyset lua-table

我需要知道如何在lua中检索表的键集.例如,如果我有下表:

tab = {}
tab[1]='a'
tab[2]='b'
tab[5]='e'
Run Code Online (Sandbox Code Playgroud)

我想要检索一个如下所示的表:

keyset = {1,2,5}
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 39

local keyset={}
local n=0

for k,v in pairs(tab) do
  n=n+1
  keyset[n]=k
end
Run Code Online (Sandbox Code Playgroud)

请注意,您无法保证任何订单keyset.如果你想在排序排序的顺序组合键,然后keysettable.sort(keyset).

  • `table.insert`需要在每次迭代时计算表的长度,因此它更慢.使用一个非常简单的基准来测量10000次迭代的'n = n + 1; keyset [n] = k`与`table.insert(keyset,k)`得到以下数字:`n`:0.76s,`table.insert`:1.34s (11认同)
  • @MichalKottman`table.insert`不需要计算表的长度(以任何有意义的方式).严格按照列表操作的表在内部保持缓存长度.但是`table.insert`仍然较慢(如你所提到的),但仅仅是因为函数调用开销之类的常数因素.特别是,`table.insert`不应该渐近变慢. (8认同)
  • 没有理由在那里使用本地n,你可以在循环中单行执行`table.insert(keyset,k)` (4认同)
  • 抱歉,我只是重新检查了我的时间安排,毕竟它们都是线性缩放的。 (3认同)
  • 你也可以使用`keyset [#keyset + 1] = k`. (2认同)

Pau*_*iar 6

local function get_keys(t)
  local keys={}
  for key,_ in pairs(t) do
    table.insert(keys, key)
  end
  return keys
end
Run Code Online (Sandbox Code Playgroud)