我需要一种方法将此字符串rec[]
转换为此
"foo/bar/test/hello"
感谢。
答案 0 :(得分:3)
你可以使用string.gmatch
拆分它,然后只需构建你想要的表,试试这个:
local pprint = require('pprint')
example="foo/bar/test/hello"
v={}
s=v
for i in string.gmatch(example, "(%w+)") do
v[i]={}
v=v[i]
end
pprint(s)
PS。在打印表中,我在这里使用pprint。
答案 1 :(得分:1)
递归是一种自然的工具。这是一个解决方案。为简单起见,convert
返回一个表。
S="foo/bar/test/hello"
function convert(s)
local a,b=s:match("^(.-)/(.-)$")
local t={}
if a==nil then
a=s
t[a]={}
else
t[a]=convert(b)
end
return t
end
function dump(t,n)
for k,v in pairs(t) do
print(string.rep("\t",n)..k,v)
dump(v,n+1)
end
end
z=convert(S)
dump(z,0)
如果您确实需要设置全局变量foo
,请在结尾处执行此操作:
k,v=next(z); _G[k]=v
print(foo)
答案 2 :(得分:0)
这是另一种(非递归)可能性:
function show(s)
local level = 0
for s in s:gmatch '[^/]+' do
io.write('\n',(' '):rep(level) .. s .. ' = {')
level = level + 2
end
for level = level-2, 0, -2 do
io.write('}',level > 0 and ',\n' or '\n',(' '):rep(level-2))
end
end
show 'foo/bar/test/hello'