我对lua的table.concat有疑问,并怀疑这只是我的无知,但无法找到一个详细解答为什么我会得到这种行为。
> t1 = {"foo", "bar", "nod"}
> t2 = {["foo"]="one", ["bar"]="two", ["nod"]="yes"}
> table.concat(t1)
foobarnod
> table.concat(t2)
在t2上运行的table.concat不提供任何结果。我怀疑这是因为键是字符串而不是整数(索引值),但我不确定为什么这很重要。
我正在寻找A)为什么table.concat不接受字符串键,和/或B)一种解决方法,允许我在少数几行中连接可变数量的表值,没有指定密钥名称。
答案 0 :(得分:2)
因为这是table.concat
documented所做的事情。
给定一个所有元素都是字符串或数字的数组,返回table [i] .. sep..table [i + 1]···sep..table [j]。 sep的默认值是空字符串,i的默认值是1,j的默认值是表的长度。如果i大于j,则返回空字符串。
非数组表没有已定义的顺序,因此无论如何table.concat
都不会有用。
你可以很容易地编写自己的,效率低下的表连接函数。
function pconcat(tab)
local ctab, n = {}, =1
for _, v in pairs(tab) do
ctab[n] = v
n = n + 1
end
return table.concat(ctab)
end
如果你想自己构建字符串,你也可以自己手动使用next
进行连接等等(虽然这可能比上面的版本效率低)。