lua中實現table的列印

2021-10-10 07:27:19 字數 3142 閱讀 4468

剛學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 放...