Lua中的字符串转变量名

在Lua中,我有一组表:

Column01 = {}
Column02 = {}
Column03 = {}
ColumnN = {}

我正在尝试根据某个值动态访问这些表。所以,在程序中稍后,我会创建一个变量,如下所示:

local currentColumn = "Column" .. variable

其中变量是01到N的数字。

然后,我尝试对数组中的所有元素做一些操作,如下所示:

for i = 1,#currentColumn do
    currentColumn [i] = *做某事*
end

但是这不起作用,因为currentColumn是字符串而不是表的名称。如何将字符串转换为表的名称?

点赞
用户12514997
用户12514997

如果我理解正确的话,您想根据一个字符串作为变量名来访问变量?我认为您要找的是全局变量 _G。 请记住,在表中,您可以将字符串作为键。将 _G 视为一个巨大的表,其中您创建的每个表或变量都只是值的键。

Column1 = {"A", "B"}
string1 = "Column".."1" --连接列和1.您可以将1换成变量。如果使用变量,请务必使用 tostring,如下所示:
var = 1
string2 = "Column"..tostring(var) --变成 "Column1"
print(_G[string2]) --打印表的位置。您可以像访问其他表一样进行索引,如下所示:
print(_G[string2][1]) --打印表的第一项(A)。

因此,如果您想遍历称为 Column1,Column2 等的五个表,可以使用 for 循环创建字符串,然后访问该字符串。

C1 = {"A"} --我将名称缩短为 C,以便更容易输入此示例。
C2 = {"B"}
C3 = {"C"}
C4 = {"D"}
C5 = {"E"}
for i=1, 5 do
local v = "C"..tostring(i)
print(_G[v][1])
end

输出

A
B
C
D
E

编辑:我是个蠢蛋,我把一切都复杂化了。有一个更简单的解决方案。如果您仅想访问循环中的列而不是在某些点上访问单个列,则此处的更简单解决方案可能是将所有列放入更大的表中,然后在该表上进行索引。

columns = {{"A", "1"},{"B", "R"}} --每个匿名表都是一列。如果它附有像 "column1 = {"A"}" 这样的键,它就不能以数字进行迭代。
--您也可以实时插入。
column3 = {"C"}
table.insert(columns, column3)
for i,v in ipairs(columns) do
print(i, v[1]) --i 是索引,v 是表。这将打印您正在使用哪个列,并获取表中的第一项。
end

输出:

1   A
2   B
3   C

对于未来的读者:如果您想获得根据其名称作为字符串获取表的通用解决方案,则第一种解决方案是您想要的。如果您的情况像提问者那样,则第二个解决方案应该没问题。

2019-12-22 23:19:58