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

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

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

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

Lua 中的 Table(表)結(jié)構(gòu)可以使用任何數(shù)據(jù)作為 key 進(jìn)行取值。使用 C API 訪問(wèn) 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é)束時(shí),棧上的情況均為:棧頂為 t[k],次頂元素為 Table 類型的 t。第二種方法其實(shí)是第一種方法在「key 為字符串」時(shí)的特殊寫法。

C API 遍歷 Table

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

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

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

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

雖然這是手冊(cè)中記載的遍歷方法,但這種方法在遍歷時(shí)并沒(méi)有一定的遍歷順序,于是便又有了下面的方法。

用整數(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);
    /* 此時(shí)棧頂即為 t[i] 元素 */
    lua_pop(L, 1);
}

這種方法無(wú)視了非整數(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連接大量字符串實(shí)例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Lua中的邏輯運(yùn)算符使用詳解

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

    Lua和C++的通信流程代碼實(shí)例

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

最新評(píng)論

涞水县| 珠海市| 阿合奇县| 喀喇| 舒城县| 鄂尔多斯市| 汶上县| 湖南省| 安达市| 类乌齐县| 文安县| 安庆市| 汤原县| 绿春县| 宁强县| 景德镇市| 吴江市| 丰顺县| 曲沃县| 河间市| 九龙坡区| 拜城县| 武宣县| 兴城市| 石阡县| 顺义区| 阿城市| 德江县| 澄江县| 都兰县| 太仆寺旗| 永昌县| 台州市| 苍梧县| 新民市| 甘谷县| 定结县| 东乌珠穆沁旗| 迁安市| 北流市| 固安县|