所以,我有一个脚本,我在一个字符串中输入3个单词,并把它们放入一个小表,我只需要这个脚本打印一个新的表,我可以复制和粘贴,所以我只需要打印表看起来像这是脚本目前有
local tbl = {
{1, "", 0},
{2, "", 0},
{3, "", 0}
}
local input = "i hate debugging"
local words = {}
x = 0
repeat
x = x + 1
for i, v in ipairs(tbl) do
if tonumber(v[1]) == x then
for word in input:gmatch"[^ ,rn]+" do
table.insert(words, word)
end
end
end
until x == 1
,期望的输出应该如下所示
{1, "i", 0},
{2, "hate", 0},
{3, "debugging", 0},
这个问题不是很清楚,OP的目标也不清楚,但似乎您可能想要这样的东西:
local tbl = {
{ 1, "", 0 },
{ 2, "", 0 },
{ 3, "", 0 }
}
local input = "i hate debugging"
local nextWord = input:gmatch"[^ ,rn]+"
for k, t in ipairs(tbl) do
t[2] = nextWord() or ""
end
-- Display updated `tbl`
print("updated tbl")
for k, v in ipairs(tbl) do
print(string.format('{ %d, "%s", %d },', v[1], v[2], v[3]))
end
gmatch
返回一个迭代器,因此您可以重复调用该迭代器以获得连续匹配。可以在tbl
上循环,每次调用迭代器来设置字符串。当迭代器没有匹配时,它将返回nil
,因此当迭代器耗尽时,代码将字符串设置为""
。
程序输出:
updated tbl
{ 1, "i", 0 },
{ 2, "hate", 0 },
{ 3, "debugging", 0 },
从输入
创建新表OP在注释中澄清了应该从输入创建一个新表。下面是一个函数createWordTable
,它从一个字串中创建并返回一个新表。printWordTable
函数只是一个显示单词表内容的实用函数。
function createWordTable(wordString)
local wordTbl = {}
local i = 1
for w in wordString:gmatch"[^ ,rn]+" do
wordTbl[i] = { i, w, 0 }
i = i + 1
end
return wordTbl
end
function printWordTable(wordTbl)
for k, v in ipairs(wordTbl) do
print(string.format('{ %d, %s, %d }', v[1], v[2], v[3]))
end
end
样本互动:
> wtbl = createWordTable("one, two, three")
> printWordTable(wtbl)
{ 1, one, 0 }
{ 2, two, 0 }
{ 3, three, 0 }
> wtbl = createWordTable("one, two, three, four, five")
> printWordTable(wtbl)
{ 1, one, 0 }
{ 2, two, 0 }
{ 3, three, 0 }
{ 4, four, 0 }
{ 5, five, 0 }