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实现的主要内容,如果未能解决你的问题,请参考以下文章