使用lua next 遍歷表

2021-08-25 12:25:54 字數 613 閱讀 2827

問題概要: 用lua寫了個函式,返回的是乙個表.需要在c裡對返回的表裡元素做二次處理.

在c裡我們可以通過lua_gettable()或者lua_rawget()來獲取表裡元素值,但使用這兩個介面的前提是你得知道key,它才能給你value. 當然對於順序下標倒無所謂,但恰巧這次我用到的是關聯陣列,下標是無規則字串.這時候如何遍歷出表裡元素就是個問題.

lua_next()就成了比較合適的選擇.畫了下圖對整個邏輯做了解釋

上圖對簡單的表遍歷做了介紹, 但事實上的情況是我返回了乙個二維表,如果你了解了lua_next()的處理過程,那下面的**看起來就沒什麼問題了.

t_idx = lua_gettop(l);

lua_pushnil(l);

while (lua_next(l, t_idx))

lua_pop(l, 1);

}本文僅起個拋磚引玉的作用, 實際上lua的棧邏輯基本就是這樣.其他介面的呼叫方式也很類似.

1.引數壓棧

2.call 函式

3.返回值位於棧頂

4.pop返回值

lua 使用lua next 遍歷表

進行下面步驟前先將 table 壓入棧頂 intnindex lua gettop plua 取 table 索引值 lua pushnil plua nil 入棧作為初始 key while 0 lua next plua,nindex 現在棧頂是 table lua next 這個函式的工作過程...

使用表變數或臨時表遍歷資料

方法1 使用表變數 宣告表變數 declare temp table empid int,firstname nvarchar 10 lastname nvarchar 20 將源表中的資料插入到表變數中 insert into temp empid,firstname,lastname selec...

mysql表的遍歷 MySQL 全表遍歷

今天做乙個業務需求的邏輯處理,需要對mysql全表進行遍歷,資料規模百萬級別,為方便描述,這張表就用 a 來代替吧 結合自己的思路和一些資料,在這裡記錄一下方案的進化史 一 直接遍歷拿出所有的資料 select from a 這個肯定不用多說了,估計還沒拿完,記憶體就爆了,對這種數量級的表不現實 二...