我有一个像这样的嵌套表:
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。
答案 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 。这不是理想的解决方案,但如果您遇到col1
到col30
之类的问题,它就会有效。