2015-06-17 46 views
0

我遇到了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)一種解決方法,該方法允許我在少數幾行中連接可變數量的表值,而不指定關鍵名稱。

回答

2

因爲這就是table.concatdocumented這樣做。

給定一個數組,其中所有元素都是字符串或數字,返回table [i] .. sep..table [i + 1] ... sep..table [j]。 sep的默認值是空字符串,i的默認值是1,j的默認值是表的長度。如果我大於j,則返回空字符串。

非數組表沒有定義的順序,所以table.concat不會那麼有幫助。

你可以很容易地編寫你自己的低效的表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做CONCAT,等自己,如果你想自己構建的字符串(儘管這可能是低效率的,則以上版本)。

+0

是的,這是非常有意義的,我在第一次閱讀時並沒有完全理解它,謝謝! – NNLocke