• LUA table


    1 table实现介绍

    脚本table中的元素在c中是分两个地方存放的,即数组与hash表。table中元素的位置也不是一直固定的,它会根据table被修改的情况动态改变。下面分两种情况说一下table的特点,我们首先要知道在lua中,索引值可以为负数也可以为正数,当为负数的话,top为-1,当为正数第一个压入栈的元素为1,依此类推,如果构造table的时候指定了key的值,不管key是何值,也会将key进行hash。比如

    t1 =
    {
    [1] = 100,
    [2] = 200,
    [3] = 300,
    }

    只有构造table时不指定key值,这些value才会放在数组段。比如
    t2 = {100, 200, 300}

    2 表访问的一些规则

    • table支持几乎是所有类型的下标包括函数
    • 对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以
    • table默认的第一个索引下标是1,如果没有指定下表,就只能通过索引值来访问表的成员

    3 table操作

    //
    //如果设置的k:v k是字符串,也可能是其它lua数值类型(比如常见的数字索引),可以使用lua_settable
    //void (lua_settable) (lua_State *L, int idx);
    //idx 指的是要操作的表在堆栈的位置
    //key 和value在哪呢,在栈上面,一般情况下栈如下
    // |value| stack top
    // |key |
    // |table| stack bottom
    //

    //lua_rawset用法同lua_settable,但更快(因为当key不存在时不用访问元方法__newindex)


    //
    //如果设置的k:v k是字符串,可以使用lua_setfield方便点
    //LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
    //idx 指的是要操作的表在堆栈的位置
    //k表示要设置的key
    //那value在哪呢?就是栈顶.
    //

  • 相关阅读:
    Linux查询python路径
    yarn.nodemanager.vmempmemratio的通俗解释(转载)
    Hive中count(1)结果为0的原因
    Yarn资源调度过程详细(TEZ)
    hive分区表新增字段需要加cascade
    【Tokio】最大阻塞线程数
    【Tokio】设置工作线程数
    【Tokio】自定义线程名称
    【Tokio】运行时建造器
    【Tokio】启用新功能
  • 原文地址:https://www.cnblogs.com/sysnap/p/6914206.html
Copyright © 2020-2023  润新知