日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lua table是否为空的判断

發布時間:2024/1/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua table是否为空的判断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自 http://www.cnblogs.com/njucslzh/archive/2013/02/02/2886876.html


在項目的腳本lua中經常有這樣的需求,

1、local a = {}

2、對a進行處理

3、對a是否為空表進行判斷

關于對a是否為空表的判斷,如果直接這樣做:

if a == {} then

這樣的結果就是a == {}永遠返回false,是一個邏輯錯誤。因為這里比較的是table a和一個匿名table的內存地址。

也有些代碼如此做:

if table.maxn(a) == 0 then

這樣做也不保險,除非table的key都是數字,而沒有hash部分。

難道真的要遍歷table發現有東西就return false跳出才能斷定它是否為空嗎?這樣做是可以的,至少目前項目中前人是這么封裝的,不過代碼太難看.?

網上小搜了一下,發現原來官方手冊里早已經給了答案,那就是靠lua內置的next函數

即如此用:if next(a) == nil then

next其實就是pairs遍歷table時用來取下一個內容的函數.

在項目的module中最好封裝一下,免得module本地也有next函數

于是封裝后判斷的lua table是否為空的函數如下:

function table_is_empty(t)

??????? return _G.next( t ) == nil

end

不過呢,使用next也有注意事項,一并提一下。for循環pairs一個table就是使用的next實現,不過這個循環過程中,不能賦新的元素給table,不然結果就是未知的,不過你可以在循環的過程中改變已有的值,特別地,可以通過賦為nil來刪除一個元素。

1 t = { [1] = 'a', [2] = 'b', [3] = 'c', [32] = 'df', [10] = 'm'} 2 START = 5 3 for k, v in pairs(t) do 4 print(k, v) 5 if k < START then 6 t[k + START] = v 7 t[k] = nil 8 end 9 end 10 11 print('****************') 12 for k, v in pairs(t) do 13 print(k, v) 14 end

執行結果

next的文檔說明如下:




總結

以上是生活随笔為你收集整理的lua table是否为空的判断的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。