【问题标题】:Lua table C apiLua表C api
【发布时间】:2011-02-17 08:20:16
【问题描述】:

我知道: http://lua-users.org/wiki/SimpleLuaApiExample

它向我展示了如何逐个条目地建立一个表(键,值)对。

假设相反,我想构建一个巨大的表(比如一个 1000 个条目的表,其中键和值都是字符串),在 lua 中是否有一种快速的方法(而不是每个条目 4 个 func 调用:

push
key
value
rawset

【问题讨论】:

  • 你的测试程序是什么样的,它是如何进行基准测试的,为什么速度不够快? :-) !
  • (另外:每个条目只需要 3 个函数调用:push key、push value、rawset)
  • @ kaizer.se,rawset 将表格留在堆栈上?

标签: lua lua-table


【解决方案1】:

不幸的是,对于关联表(字符串键、非连续整数键),不,没有。

对于数组类型的表(使用常规的 1...N 整数索引),有一些性能优化函数,lua_rawgetilua_rawsetihttp://www.lua.org/pil/27.1.html

【讨论】:

    【解决方案2】:

    对于字符串键,您可以使用lua_setfield

    【讨论】:

      【解决方案3】:

      你写的解决这个问题的快速方法。 Lua 表设计精巧,速度足够快,不需要某种虚假的“提示”来表示“我希望这个表能够增长到包含 1000 个元素。”

      【讨论】:

        【解决方案4】:

        您可以使用 createtable 创建已具有所需插槽数的表。但是,在那之后,除了

        for(int i = 0; i < 1000; i++) {
            lua_push... // key
            lua_push... // value
            lua_rawset(L, tableindex);
        }
        

        【讨论】:

        • 你不需要复制堆栈上的表格? rawset 不消费表?
        • 没有。 Rawset 只使用键和值。否则,你怎么能在一张表中设置多个 k、v 对?
        猜你喜欢
        • 2011-05-30
        • 1970-01-01
        • 2015-05-31
        • 2013-06-17
        • 2014-09-23
        • 1970-01-01
        • 2021-06-13
        • 2013-10-03
        • 1970-01-01
        相关资源
        最近更新 更多