LUA:如何从字符串创建二维数组/表

LUA:如何从字符串创建二维数组/表,lua,Lua,我看到了一些关于在lua表中生成字符串的帖子,但我的问题有点不同[我认为],因为该表还有一个额外的维度 我有一个保存为文件的表表[将文件读取为字符串没有问题] 假设我们从这一点开始: localtot=“{{1,2,3},{4,5,6}” 当我尝试其他用户的答案时,我得到的结果是: localonedtable={{1,2,3},{4,5,6} 这不是我想要的 如何正确地创建一个包含这些表作为条目的表? 预期结果: TwoDtable={{1,2,3},{4,5,6} 提前感谢您可以使用load

我看到了一些关于在lua表中生成字符串的帖子,但我的问题有点不同[我认为],因为该表还有一个额外的维度

我有一个保存为文件的表表[将文件读取为字符串没有问题]

假设我们从这一点开始:
localtot=“{{1,2,3},{4,5,6}”

当我尝试其他用户的答案时,我得到的结果是:
localonedtable={{1,2,3},{4,5,6}

这不是我想要的

如何正确地创建一个包含这些表作为条目的表? 预期结果:

TwoDtable={{1,2,3},{4,5,6}


提前感谢

您可以使用load函数以Lua代码的形式读取字符串的内容

local myArray = "{{1,2,3}, {4,5,6}}"
local convert = "myTable = " .. myArray
local convertFunction = load(convert)
convertFunction()
print(myTable[1][1])

现在,myTable具有二维数组中的值。

对于快速解决方案,我建议使用
load
hack,但请注意,只有当您的代码碰巧已格式化为Lua表时,这才有效。否则,您必须自己解析字符串

例如,您可以尝试使用lpeg构建递归解析器。我不久前做了一个非常相似的东西:

local lpeg=需要“lpeg”
本地名称=lpeg.R('az')^1/'\0
局部空间=lpeg.S('\t')^1
局部函数编译\u元组(…)
返回string.char(选择('#',…)。。表.concat{…}
结束
局部表达式=lpeg.P{
"e";;
e=名称+lpeg.V't';
t='('*((lpeg.V'e'*','*空格)^0*lpeg.V'e')/compile_tuple*);
}
本地编译=表达式:匹配“(foo,(a,b),bar)”
打印(编译:字节(1,-1))
它的目的是解析引号中的东西,比如示例字符串
(foo,(a,b),bar)
,并将其转换为描述结构的二进制字符串;不过,大多数情况都发生在
compile\u tuple
函数中,因此修改它以实现所需功能应该很容易

你必须适应的是:

  • 更改
    编号的
    名称
    (并相应地将模式更改为
    lpeg.R('09')^1
    ,不带
    /'\0'
  • compile\u tuple
    函数更改为
    build\u table
    函数(
    local function build\u tanle(…)return{…}end
    应该可以)
  • 尝试一下,看看是否还有其他需要改变的地方;我可能错过了什么

如果你对这个东西的工作原理感到好奇,可以阅读lpeg手册。

看看这个很漂亮-谢谢,我不知道这个。我刚刚开始我的Lua之旅。。。。这是一个有趣的游戏。谢谢你,这比我现在需要的要多。一定要放在后面的口袋里。