[英]LUA: How to Create 2-dimensional array/table from string
我看到几篇关于在 lua 表中创建字符串的帖子,但我的问题有点不同 [我认为] 因为表有一个额外的维度。
我有一个保存为文件的表格表[我没有问题将文件读取到字符串]。
假设我们从这一点开始: local tot = "{{1,2,3}, {4,5,6}}"
当我尝试其他用户的答案时,我最终得到: local OneDtable = {"{1,2,3}, {4,5,6}"}
这不是我想要的。
如何正确创建包含这些表作为条目的表? 期望的结果:
TwoDtable = {{1,2,3}, {4,5,6}}
提前致谢
您可以使用加载 function 将字符串的内容读取为 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 = require 'lpeg'
local name = lpeg.R('az')^1 / '\0'
local space = lpeg.S('\t ')^1
local function compile_tuple(...)
return string.char(select('#', ...)) .. table.concat{...}
end
local expression = lpeg.P {
'e';
e = name + lpeg.V 't';
t = '(' * ((lpeg.V 'e' * ',' * space)^0 * lpeg.V 'e') / compile_tuple * ')';
}
local compiled = expression:match '(foo, (a, b), bar)'
print(compiled:byte(1, -1))
它的目的是解析引号中的内容,例如示例字符串(foo, (a, b), bar)
并将其转换为描述结构的二进制字符串; 大多数情况发生在compile_tuple
function 中,所以应该很容易修改它来做你想做的事。
你必须适应的:
number
的name
(并将模式相应地更改为lpeg.R('09')^1
,不带/ '\0'
)compile_tuple
function 更改为build_table
function ( local function build_tanle(...) return {...} end
应该这样做)如果您对这些东西的工作原理感到好奇,您可以在此处阅读 lpeg 手册。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.