lua 中table的使用和分析_lua怎么在table中查找关键字-程序员宅基地

技术标签: 操作  2015学习笔记  lua  table  

1.table有4种基本操作:读,写,迭代和获取长度。
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中表的存储是分为两个部分:一个是数组部分,一个是哈希表。相应指针,和对应长度如代码中注释。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/q270274978/article/details/42744635

智能推荐

分布式事务 (五) Seata AT模式-Spring Cloud微服务添加 AT 分布式事务_springcloudseata开启at-程序员宅基地

文章浏览阅读148次。文章目录下载订单项目案例(无事务版)Seata Server - TC全局事务协调器Seata Server 配置registry.conffile.conf启动参数设置启动 Seata Serverorder订单服务添加 Seata AT 事务order-parent 添加 seata 依赖配置application.ymlregistry.conffile.conf创建 seata 数据源代理启动全局事务启动 order 项目进行测试测试出现异常,回滚的情况storage库存服务添加 Seata AT _springcloudseata开启at

python运行时出现MySQLdb._exceptions.OperationalError错误解决方法_(mysqldb._exceptions.operationalerror) (1115, "err-程序员宅基地

文章浏览阅读9.7k次。上篇安装好mysqlclient之后进行连接mysql数据库,在连接的过程中出现以下错误:MySQLdb._exceptions.OperationalError:(2059,<NULL>)经过一番查找得知是因为mysql版本与我所使用的Python Flask不兼容,因此出现以上错误环境:mysql8.0 flask更多关于该错误在stackoverflow上的..._(mysqldb._exceptions.operationalerror) (1115, "errcode = 2, detailmessage =

Verilog 实现8位乘法器_mutipler 流程-程序员宅基地

文章浏览阅读2.5k次。`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer://// Create Date: 2021/04/17 10:29:35// Design Name:// Module Name: mutipler// Project Name:// Target Devices:// Tool Ver_mutipler 流程

华为机试108题 11-20_本题目要求输入n个字符串,按照ascii码值排序后,依次输出。 输入格式: 一行输入整-程序员宅基地

文章浏览阅读1k次。11. 数字颠倒 12. 字符串反转输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001输入:输入一个int整数输出:将这个整数以字符串的形式逆序输出示例:输入1516000输出0006151思路:字符串反转代码实现:str_num = str(input())print(str_nu..._本题目要求输入n个字符串,按照ascii码值排序后,依次输出。 输入格式: 一行输入整

数据库优化之慢查询_ck查询慢-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏32次。MySQL如何优化表的设计合理化(符合3NF)添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]SQL语句优化分表技术(水平分割、垂直分割)读写[写: update/delete/add]分离存储过程 [模块化编程,可以提高速度]对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]mysql服务器硬件升级..._ck查询慢

Socket网络编程--简单Web服务器(4)-程序员宅基地

文章浏览阅读86次。  上一小节已经实现了对图片的传输,接下来就是判断文件是否为js,css,png等格式。我们增加一个函数用于判断格式 1 int WebServer::get_filetype(char *type,char *path)//用于判断该url指向文件的后缀 2 { 3 if(strstr(path,".html")) 4 strcpy(type,"tex..._利用socket网络编程机制实现一个简单的web服务器的实现,实现get方式的对html文件

随便推点

java.nio.file.files_JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现-程序员宅基地

文章浏览阅读273次。JDK1.7中引入了新的文件操作类java.nio.file这个包,其中有个Files类它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件。开发者还可以使用Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出。此方法确保了当读入文件的所有字节内容时,无论是否...

web基础---->Fileupload文件的上传-程序员宅基地

文章浏览阅读97次。  这里我们介绍文件上传的知识,使用的是apache的Commons FileUpload框架。文件上传的使用项目的部分结构如下:一、使用Commons FileUpload的上传功能,我们需要引入两个jar包:commons-fileupload和commons-io。首先我们列出html的部分<!DOCTYPE html><html lang="e...

解决IDEA2020.1新建项目需要重新配置maven_idea2020.1.1打开新项目时自动匹配maven-程序员宅基地

文章浏览阅读2.2k次。IDEA2020.1新建项目后的maven是默认配置,设置安装好的maven仓库File —> New Prijects Settings —> Setting for New Projects…2. 进入后设置Build, Execution, Deployment —> Build Tools —> Maven_idea2020.1.1打开新项目时自动匹配maven

Mongodb 性能测试_mongo单点性能-程序员宅基地

文章浏览阅读638次。转载地址 http://www.cnblogs.com/lovecindywang/archive/2011/03/02/1969324.html进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:(所有插入都是单线程进行,所有读取都是多线程进行)1) 普通插入性能 (插入的数据每条大约在1KB左右)2) 批量插入性能 (使用的是官_mongo单点性能

VB.net学习笔记(二十七)线程同步上_vbnet同步-程序员宅基地

文章浏览阅读9.2k次。X夫妇二人试图同时从同一账户(总额1000)中支取1000。由于余额有1000,夫妇各自都满足条件,于是银行共支付2000。结果是银行亏了1000元。这种两个或更多线程试图在同一时刻访问同一资源来修改其状态,并产生不良后果的情况被称做竞争条件。 为避免竞争条件,需要使Withdraw()方法具有线_vbnet同步

Unity中减少VR晕眩症的实用技术(Yanlz+Unity+XR+VR+AR+MR+SteamVR+晕眩症+征兆冲突理论+视野+帧速+相对运动错觉+光场VR+立钻哥哥+==)_unity 开发vr很头晕-程序员宅基地

文章浏览阅读4k次,点赞10次,收藏10次。《基于Unity与SteamVR构建虚拟世界》 《基于Unity与SteamVR构建虚拟世界》 版本 作者 参与者 完成日期 备注 SteamVR_Unity_V01_1.0 严立钻 2019..._unity 开发vr很头晕