lua - table.concat 带字符串键

lua - table.concat with string keys

我在使用 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 不接受字符串键,and/or B) 允许我连接可变数量的 table 值的解决方法在几行中,没有指定键名。

因为这就是 table.concat 所做的 documented

Given an array where all elements are strings or numbers, returns table[i]..sep..table[i+1] ··· sep..table[j]. The default value for sep is the empty string, the default for i is 1, and the default for j is the length of the table. If i is greater than j, returns the empty string.

非数组 table 没有定义的顺序,所以 table.concat 无论如何都不会那么有用。

您可以轻松编写自己的低效 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 手动进行连接等操作(尽管这可能比上面的版本效率低)。