Lua嵌套表获取元素

时间:2014-01-05 19:56:47

标签: lua lua-table

我有一个像这样的嵌套表:

  t1 ={}
  t1[1] = {col1=1,col2=1,col3=1,col4=1}
  t1[2] = {col1=1,col2=1,col3=1,col4=1}
  t1[3] = {col1=1,col2=1,col3=1,col4=1}
  t1[4] = {col1=1,col2=1,col3=1,col4=1}

实际上它在t1中有250个项目,每个嵌套表有30个项目要大得多,所以我想要做的就是循环并得到如下的子表值:

 for i = 2, 4 do
  local width = t1[draw.ID].col1 --draw.ID is got elsewhere
 end

但是将.col1的数字部分更改为i部分,以便在循环播放时获取:

 t1[draw.ID].col2
 t1[draw.ID].col3
 t1[draw.ID].col4

我正在使用Lua 5.1。

2 个答案:

答案 0 :(得分:6)

for i= 2, 4 do
  local width = t1[draw.ID]["col" .. i] --draw.ID is got elsewhere
end

答案 1 :(得分:3)

理想情况col 包含类似数组的表或序列 。这是一种更加可扩展的方式来完成您正在尝试的操作。字符串连接['col' .. i]以您作为数组访问它们的方式访问表键是昂贵且不必要的,如果可以避免它。如果您打算经常这样做并希望快速工作,那么尤为重要

-- Elements of t1 contain tables with cols.
local t1 = {}
t1[1] = {cols = {1,1,1,1}}
t1[2] = {cols = {1,1,1,1}}
t1[3] = {cols = {1,1,1,1}}
t1[4] = {cols = {1,1,1,1}}

for i=2, 4 do
  local width = t1[draw.ID].cols[i]
end

-- Elements of t1 are the cols.
local t1 = {}
t1[1] = {1,1,1,1}
t1[2] = {1,1,1,1}
t1[3] = {1,1,1,1}
t1[4] = {1,1,1,1}

for i=2, 4 do
  local width = t1[draw.ID][i]
end

编辑:如果您不得不以['col' .. i]的方式使用表格密钥,那么您可以做的最好的事情是缓存它们以便更快地访问。

-- Cache all the possible keys that you'll need.
local colkeys = {}
for i=1, 30 do colkeys[i] = 'col' .. i end

for i=2, 4 do
  local width = t1[draw.ID][colkeys[i]]
end

每次需要索引表时,此方法比连接字符串的速度快 4 8 。这不是理想的解决方案,但如果您遇到col1col30之类的问题,它就会有效。