1.table有4种基本操作:读,写,迭代和获取长度。
lua中没有删除操作而是将对应键位的值设置为nil.
lua的内部定义是在lobject.h
lua中没有删除操作而是将对应键位的值设置为nil.
lua的内部定义是在lobject.h
</pre><pre code_snippet_id="580775" snippet_file_name="blog_20150115_1_6202329" name="code" class="python"><pre name="code" class="cpp">/*
** Tables
*/
typedef union TKey {
struct {
TValuefields;
struct Node *next; /* for chaining */
} nk;
TValue tvk;
} TKey;
typedef struct Node {
TValue i_val;
TKey i_key;
} Node;
<pre name="code" class="cpp">typedef struct Table {
CommonHeader;
lu_byte flags; /* 1<<p means tagmethod(p) is not present */
lu_byte lsizenode; /* log2 of size of `node' array */ (哈希表的长度)
struct Table *metatable; (存储表对应的metatable)
TValue *array; /* array part */ (数组)
Node *node; (用来指向哈希表的指针)
Node *lastfree; /* any free position is before this position */ (用来获取hash表中最后一个nil的位置,hash表中插入值)
GCObject *gclist;
int sizearray; /* size of `array' array */ (数组的长度)
} Table;
从后面的表的获取长度,读写和迭代中,都可以看出lua中表的存储是分为两个部分:一个是数组部分,一个是哈希表。相应指针,和对应长度如代码中注释。