C++创建表结构代码:
1 std::map<std::wstring, std::wstring> mapInfo; 2 lua_newtable(pLua); 3 for(std::map<std::wstring, std::wstring>::iterator pos=mapInfo.begin(); pos!=mapInfo.end(); ++pos) 4 { 5 std::string keyUTF8 = TString::fromUtf16(pos->first).ToUtf8(); 6 std::string valueUTF8 = TString::fromUtf16(pos->second).ToUtf8(); 7 lua_pushstring(pLua, keyUTF8.c_str()); // key入栈 8 lua_pushstring(pLua, valueUTF8.c_str()); // value入栈 9 lua_settable(pLua, -3); // 相当于ref3[ref2] =ref1, ref3从栈顶算第三个参数,ref2从栈顶算第二个参数,ref1从栈顶参数,注意该操作会弹出从栈顶算第一个和第二个参数(也就是key和value) 10 } 11 return 1; // 返回一个参数,就是表
lua端遍历表代码:
1 -- listArr为表结构 2 for i=0, table.getn(listArr),1 do 3 local value =listArr[i] 4 end 5 6 7 8 -- 或者 9 10 11 -- value为得到的变量值 12 for i, value in ipairs(listArr) do 13 -- do something 14 end 15 16 17 -- 关联表格,索引不为整数的遍历方法 18 for i, value in pairs(listArr) do 19 -- do something 20 end
lua表结构:
1 local listArr = {"key1" = "value1", "key2" = "value2", "key3" = "value3"}
C++端解析lua端传过来的表结构代码:
1 int nIndex = lua_gettop(pLua); -- 取 table 索引值 2 lua_pushnil(pLua); -- nil 入栈作为初始 key 3 4 -- lua_next是将栈顶的旧key或者初始化为nil的元素弹出, 5 -- 并将nIndex位置的表下一键值对取出来放到栈顶 6 while (0 != lua_next(pLua, nIndex)) 7 { 8 -- 现在栈顶(-1)是 value,-2 位置是对应的 key 9 const char *str = lua_tostring(pLua, -1); -- 不同的value用不同的函数处理 10 lua_pop(pLua, 1); -- 弹出 value,让 key 留在栈顶 11 }