LUA的table实现

数据结构

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

typedef struct Table {
    CommonHeader;
    lu_byte flags;  /* 1<

设计原理

众所周知,lua的table很强大,可以当数组也可以当哈希表,这得益于其Table结构8的设计与实现。从上面可以看到,array作数组,node作哈希表。先讲讲当作数组用时是怎样的。

如果table当作数组用,在需要插入元素的时候,是以数组下标作为key,然后对array的大小进行取模的。如果下标小于当前数组大小,那么插入成功后所在的位置就跟其下标是一样的。如果下标大于当前数组大小,那么同样也是插入到该数组中,但是此时得分情况讨论了:

  • 假设
Node *mainposition (const Table *t, int ktt, const Value *kvl) {
    switch (withvariant(ktt)) {
    case LUA_TNUMINT:
        return hashint(t, ivalueraw(*kvl));
    ....
    }
}

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

冲突解决

转载于:https://www.cnblogs.com/xcw0754/p/11416545.html

你可能感兴趣的:(LUA的table实现)