博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LUA的table实现
阅读量:4448 次
发布时间:2019-06-07

本文共 614 字,大约阅读时间需要 2 分钟。

数据结构

下面的结构体是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

你可能感兴趣的文章
Codeforces Beta Round #10 B. Cinema Cashier (树状数组)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
线段树
查看>>
LLVM提议向C语言中加入模块机制
查看>>
免费学习视频
查看>>
Winodws10 &system进程占用磁盘100%
查看>>
css样式优先级
查看>>
遇见未知的自己
查看>>
js中return;、return true、return false;区别
查看>>
关于list的一些作业
查看>>
bzoj 2818: Gcd
查看>>
bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)
查看>>
JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
查看>>
九度oj题目1521:二叉树的镜像
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
CSS的定位和浮动
查看>>
Storm启动流程分析
查看>>
C++11中lock_guard和unique_lock的区别
查看>>
解决find命令报错: paths must precede expression
查看>>