国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Lua判斷Table是否為空的方法(空的table即{})

2024-07-21 23:04:28
字體:
來源:轉載
供稿:網友

判斷方法結論:

復制代碼 代碼如下:

a={}
if next(a) ~=nil then dosomething end

 

    最近在項目里面大量使用的lua,其中lua的table是lua中重要的數據結構,可以被用來當做C++中的數組,vector,map來使用。

    如何判斷lua中的table是否是空的table呢?

    一開始我沒動腦子,是這樣寫的:

復制代碼 代碼如下:

a={}
if a ==nil then dosomething end

    這個方法錯誤是顯而易見的,在lua中a其實是一個指針,指向了table的結構,所以這個方法其實是比較地址是否為空,顯然錯了。

 

    之后我改進了下,代碼如下:

復制代碼 代碼如下:

a={}
if a=={} then dosomething end

    仔細一看上面的改進,相當于沒改,這里的a指針比較的還是一個匿名的地址,肯定是false。

 

    之后我這樣想,空table的size肯定為0,那我直接判斷表的大小不就完了嘛,于是我借助#操作符,代碼改進為:

復制代碼 代碼如下:

a={}
if #a==0 then dosomething end

    但是問題來了,#操作符要求table中的項都不為nil,悲??!之后我想到了table.maxn內置函數,于是代碼繼續改成:
復制代碼 代碼如下:

a={}
if table.maxn(a) == 0 then dosomething end

    不容易啊,程序可以跑了,但是查閱了下相關資料,maxn函數是根據每一項的hash來判斷的,這樣寫代碼也很保險,除非你的table是全數字的鍵。

 

    最后才想起用泛型方法遍歷一個table時使用的內置next函數,代碼改進如下:

復制代碼 代碼如下:

a={}
if next(a) ~=nil then dosomething end
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仙居县| 万载县| 大埔区| 安乡县| 兖州市| 安国市| 桐乡市| 普安县| 通许县| 广南县| 彩票| 中阳县| 开封县| 彩票| 阿克陶县| 贡山| 织金县| 苗栗县| 绵阳市| 宜宾市| 灵丘县| 垫江县| 弥渡县| 赞皇县| 陆川县| 枣强县| 金华市| 平舆县| 沙河市| 沁源县| 运城市| 鄂托克旗| 平阴县| 惠水县| 桃园市| 上栗县| 江安县| 花莲县| 云南省| 如东县| 黄山市|