lua - 带有字符串键的table.concat

时间:2015-06-17 22:27:43

标签: lua lua-table

我对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)一种解决方法,允许我在少数几行中连接可变数量的表值,没有指定密钥名称。

1 个答案:

答案 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进行连接等等(虽然这可能比上面的版本效率低)。