LUA的table实现

Posted xcw0754

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA的table实现相关的知识,希望对你有一定的参考价值。

数据结构

下面的结构体是lua中所定义的table

typedef struct Table 
    CommonHeader;
    lu_byte flags;  /* 1<<p means tagmethod(p) is not present */
    lu_byte lsizenode;  /* log2 of size of 'node' array */
    unsigned int alimit;  /* "limit" of 'array' array */
    TValue *array;    //数组
    Node *node;    // 哈希表
    Node *lastfree;    // 辅助寻找冲突节点的指针
    struct Table *metatable;
    GCObject *gclist;
 Table;

设计原理

众所周知,lua的table很强大,可以当数组也可以当哈希表,这得益于其Table结构的设计与实现。

从上面可以看到,array作数组,node作哈希表。

  • 如果table当作哈希表用,那么array的长度一般会相对较小,因为对key进行哈希后的结果比较分散。所以大都保存在node中。
  • 如果table当作数组用,那么array的长度一般会较大,因为key其实就是数组的下标。所以都在array中。

以上是关于LUA的table实现的主要内容,如果未能解决你的问题,请参考以下文章

lua中table的实现

Lua用table实现各种数据结构-链表

LUA的table实现

深入Lua:Table的实现

lua 打印一个table的实现

Lua用table实现各种数据结构-数组