最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua 學(xué)習(xí)筆記之C API 遍歷 Table實現(xiàn)代碼

 更新時間:2014年12月14日 23:54:27   作者:TimothyQiu  
這篇文章主要介紹了Lua 學(xué)習(xí)筆記之C API 遍歷 Table實現(xiàn)代碼,需要的朋友可以參考下

Lua 通過一個虛擬棧與 C 的交互,正數(shù)索引自底向上取值,負(fù)數(shù)索引自頂向下取值。

Lua 中的 Table(表)結(jié)構(gòu)可以使用任何數(shù)據(jù)作為 key 進(jìn)行取值。使用 C API 訪問 Table 中的元素有兩種方法:

復(fù)制代碼 代碼如下:

lua_getglobal(L, t);
lua_pushinteger(L, k); -- 這里可以換成其它類型的 lua_pushXXXX(L, k) 壓數(shù)據(jù)到棧頂作key
lua_gettable(L, -2);

lua_getglobal(L, t);
lua_getfield(L, -1, k);

在結(jié)束時,棧上的情況均為:棧頂為 t[k],次頂元素為 Table 類型的 t。第二種方法其實是第一種方法在「key 為字符串」時的特殊寫法。

C API 遍歷 Table

復(fù)制代碼 代碼如下:

lua_getglobal(L, t);
lua_pushnil(L);
while (lua_next(L, -2)) {
/* 此時棧上 -1 處為 value, -2 處為 key */
lua_pop(L, 1);
}

lua_next 函數(shù)針對 -2 處(參數(shù)指定)的 Table 進(jìn)行遍歷。彈出 -1 處(棧頂)的值作為上一個 key(為 nil 時視為請求首個 key),壓入 Table 中的下一個 key 和 value。返回值表示是否存在下一個 key。

另外在循環(huán)中處理值時要記得隨時清理棧,否則 Table 就不在 -2 了。(也可以考慮在 lua_getglobal 后用 lua_gettop 存下 Table 的正數(shù)索引。)

雖然這是手冊中記載的遍歷方法,但這種方法在遍歷時并沒有一定的遍歷順序,于是便又有了下面的方法。

用整數(shù) Key 進(jìn)行并不那么完美的遍歷

復(fù)制代碼 代碼如下:

lua_getglobal(L, t);
len = lua_objlen(L, -1);
for (i = 1; i <= len; i++) {
    lua_pushinteger(L, i);
    lua_gettable(L, -2);
    /* 此時棧頂即為 t[i] 元素 */
    lua_pop(L, 1);
}

這種方法無視了非整數(shù) key,但可以保證遍歷順序。如果只關(guān)注整數(shù) key,可以考慮用這種遍歷方法 :)

相關(guān)文章

  • Lua中釋放table占用內(nèi)存的方法

    Lua中釋放table占用內(nèi)存的方法

    這篇文章主要介紹了Lua中釋放table占用內(nèi)存的方法,本文講解了兩種釋放內(nèi)存的方法,需要的朋友可以參考下
    2015-04-04
  • Lua中使用table.concat連接大量字符串實例

    Lua中使用table.concat連接大量字符串實例

    這篇文章主要介紹了Lua中使用table.concat連接大量字符串實例,本文是Lua處理大量字符串的一個測試文章,測試了2種方法處理大量字符串的消耗時間,需要的朋友可以參考下
    2014-09-09
  • Lua中模塊以及實現(xiàn)方法指南

    Lua中模塊以及實現(xiàn)方法指南

    從Lua 5.1開始,我們可以使用require和module函數(shù)來獲取和創(chuàng)建Lua中的模塊。從使用者的角度來看,一個模塊就是一個程序庫,可以通過require來加載,之后便得到一個類型為table的全局變量。
    2015-04-04
  • Lua一維數(shù)組與多維數(shù)組的使用示例

    Lua一維數(shù)組與多維數(shù)組的使用示例

    今天小編就為大家分享一篇關(guān)于Lua一維數(shù)組與多維數(shù)組的使用示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Lua面向?qū)ο笾嘀乩^承、私密性詳解

    Lua面向?qū)ο笾嘀乩^承、私密性詳解

    這篇文章主要介紹了Lua面向?qū)ο笾嘀乩^承、私密性詳解,本文講解了多重繼承之在多個類中查找一個字段、多重繼承之創(chuàng)建繼承多個類的子類、類的私密性等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua編程示例(四):Lua標(biāo)準(zhǔn)庫之表庫、字符串庫、系統(tǒng)庫

    Lua編程示例(四):Lua標(biāo)準(zhǔn)庫之表庫、字符串庫、系統(tǒng)庫

    這篇文章主要介紹了Lua編程示例(四):Lua標(biāo)準(zhǔn)庫之表庫、字符串庫、系統(tǒng)庫,需要的朋友可以參考下
    2015-07-07
  • Lua的table庫函數(shù)insert、remove、concat、sort詳細(xì)介紹

    Lua的table庫函數(shù)insert、remove、concat、sort詳細(xì)介紹

    這篇文章主要介紹了Lua的table庫函數(shù)insert、remove、concat、sort詳細(xì)介紹,本文分別給出了這幾個函數(shù)的使用實例,需要的朋友可以參考下
    2015-04-04
  • 如何使用Vim搭建Lua開發(fā)環(huán)境詳解

    如何使用Vim搭建Lua開發(fā)環(huán)境詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Vim搭建Lua開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Lua中的邏輯運算符使用詳解

    Lua中的邏輯運算符使用詳解

    這篇文章主要介紹了Lua中的邏輯運算符使用詳解,是Lua入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Lua和C++的通信流程代碼實例

    Lua和C++的通信流程代碼實例

    這篇文章主要介紹了Lua和C++的通信流程代碼實例,本文是上一篇的DEMO,本文用代碼講解Lua和C++之間的通信,需要的朋友可以參考下
    2014-09-09

最新評論

泰顺县| 石柱| 沭阳县| 呼伦贝尔市| 泰州市| 随州市| 那坡县| 乐陵市| 和硕县| 郸城县| 互助| 铜鼓县| 蒙城县| 蓬安县| 侯马市| 隆安县| 岚皋县| 保靖县| 永靖县| 正蓝旗| 长兴县| 固阳县| 安庆市| 瑞金市| 浦江县| 东台市| 洪湖市| 禹城市| 滁州市| 彰化市| 宁河县| 吉隆县| 山阳县| 毕节市| 五河县| 耿马| 清新县| 昌图县| 察隅县| 修武县| 吉木萨尔县|