剛學lua不久,導師布置的乙個作業,實現乙個能處理table的print
--[[
evn:lua 5.1
]]function
prettystring
(...
)for key, value in
pairs()
doprettyonestring
(value)
endend
function
prettyonestring
(data,onlytable,tab)
--data處理的資料,onlytable記錄表,tab為tab數量
printtab =
function
(n)for i=
0,n do
io.write
(" "
)--tab
endend
if onlytable ==
nilthen
onlytable =
endif
(tab ==
nil)
then
tab =
0end
iftype
(data)
~='table'
then
--非table情況
iftype
(data)
=='string'
then
io.write
(data)
else
io.write
(tostring
(data)
)end
if tab ~=
0then
--處理table成員末尾的逗號
io.write
(","
)end
io.write
("\n"
)else
--處理table
io.write
(",\n"
)end
endfunction
findtablevalue
(table,findvalue)
--尋找value是否在table中
ifnext
(table)
==nil
then
return
false
endfor key, value in
pairs
(table)
doif value == findvalue then
return
true
endreturn
false
endend
但是還是有幾個地方有問題。
沒用使用local修飾區域性變數
字串…連線消耗效能大,最好用table.concat()
尋找迴圈引用表可以使用 的方式,一方面優化了查詢時間,另一方面可以之間找到表第一次出現的位置
paris無法處理nil,必須使用select("#",…)
給table新增手動計數器,取代#table,但是可讀性個人覺得會差一點
修改後為
local
function
prettystring
(...
)local tinsert = table.insert
local uniquetable =
local
function
prettyonestring
(data,tab,path)
tab = tab or
0 path = path or
"@/"
local rettable =
--儲存最後的結果
iftype
(data)
~='table'
then
--處理非table
tinsert
(rettable ,
tostring
(data)
)if tab ~=
0then
tinsert
(rettable,
",")
endelse
--處理table
if uniquetable[
tostring
(data)]==
nilthen
tinsert
(rettable,
",",string.
rep(
"\t"
,tab)
)tinsert
(rettable,tmpstring)
else
local tmpstring = string.
format
("%s"
,uniquetable[
tostring
(data)])
tinsert
(rettable,tmpstring)
endend
return table.
concat
(rettable)
end--start
local ar** = table.
pack
(...
)for i=
1,ar**.n do
--遍歷引數
local argctype =
type
(ar**[i]
)if argctype ==
'table'
and i ~=
1then
io.write
("\n"
)end
io.write
(prettyonestring
(ar**[i]))
if argctype ~=
'table'
and i ~= ar**.n then
io.write
("\t"
)--模擬print行為
endend
io.write
("\n"
)end
return prettystring
列印Lua的Table物件
小夥伴們再也不用為列印lua的table物件而苦惱了,本人曾也苦惱過,哈哈 不過今天剛完成了這個東西,以前在網上搜過列印table的指令碼,但是都感覺很不理想,於是,自己造輪子了 列印的效果,自己感覺還比較慢,不敢私藏,趕緊分享.如有更好的更改,歡迎討論,優化 以下指令碼儲存到檔案 dumptabl...
Lua 列印table表內容
剛接觸lua時間不長,但是確實覺得lua的短小精悍,寫 的時候感覺非常的自由,最重要的是 不會稍不注意間就蹦出來個崩潰提示框。lua的table非常強大,如果說c語言說一切皆函式,c 說一切皆物件,那麼lua就是一切皆表,不準確也不接受反駁 哈哈 在進入標題內容之前,先來點前奏,大家也可以直接翻到最...
Lua中table的長度
官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 table t 的長度被定義成乙個整數下標 n 它滿足 t n 不是nil而 t n 1 為nil 此外,如果 t 1 為nil,n 就可能是零。對於常規的陣列,裡面從 1 到 n 放...