使用lua_next()遍历表

使用lua_next()遍历表,第1张

概述问题概要: 用lua写了个函数,返回的是一个表.需要在C里对返回的表里元素做二次处理. 在C里我们可以通过lua_gettable()或者lua_rawget()来获取表里元素值,但使用这两个接口的前提是你得知道key,它才能给你value. 当然对于顺序下标倒无所谓,但恰巧这次我用到的是关联数组,下标是无规则字符串.这时候如何遍历出表里元素就是个问题. lua_next()就成了比较合适的选择.

问题概要: 用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))

       {

              printf("============================/n");

              it_IDx = lua_gettop(L);

              lua_pushnil(L);

              while(lua_next(L,it_IDx))

              {

                     printf("%s/n",lua_tostring(L,-1));

                     lua_pop(L,1);

              }

              lua_pop(L,1);

       }

本文仅起个抛砖引玉的作用,实际上lua的栈逻辑基本就是这样.其他接口的调用方式也很类似.

1.参数压栈

2.call 函数

3.返回值位于栈顶

4.pop返回值

总结

以上是内存溢出为你收集整理的使用lua_next()遍历表全部内容,希望文章能够帮你解决使用lua_next()遍历表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存