lua - 使用字符串键的table.concat函数

我在使用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)解决方法,以允许我在少数几行代码中连接变量数量的表值,而不需要指定键名。

点赞
用户258523
用户258523

因为这就是 table.concat文献所规定的。

给定一个所有元素都是字符串或者数字的数组,返回 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 来做拼接等操作(尽管那可能不如上面的版本有效率)。

2015-06-17 22:35:55