热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lua程序设计table(表)

2019独角兽企业重金招聘Python工程师标准Table是Lua中主要数据结构机制,基于Table,可以以一种简单、统一和高效的方式来表示普通数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

     Table是Lua中主要数据结构机制,基于Table,可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。Table是没有固定大小的,可以动态地添加任意数量的元素到一个Table中。

      Lua中的table类型实现了“关联数组”。可以在“关联数组”中使用整数、字符串或其他类型的值(nil除外)来索引它。

      在Lua中,Table既不是“值”也不是“变量”,而是“对象”。可以将一个Table想象成一种动态分配的对象,程序仅支持有一个对它的引用(或指针),Lua不会暗中生成Table的副本或创建新的Table。可以通过“构造表达式”完成Table表的创建,最简单的构造表达式就是{}。

a = {}   --创建一个table,并将它的引用存储到a
k = "X"
a[k] = 10  ---新条目,key = "X" , value = 10
print(a["X"])    --->10a[20] = "great"  -- 新条目,key = 20, value = "great"
k = 20
print(a[k])      -->"great"
a["X"] = a["X"] + 1
print(a["X"])   --- > 11

  Table 永远是"匿名的",一个持有Table的变量与Table自身之间没有固定的关联性。

a = {}
a["X"] = 10
b = a          --- b与a引用了同一个Table。
print(b["X"])  --- 10
b["X"] = 20
print(a["X"])   --- 20
a = nil         --现在只有b还在引用Table
b = nil         --再也没有对Table的引用了。 
一个Table的多个引用在对Table进行修改,修改的是全局的概念。当一个程序再也没有一个Table的引用时,Lua的垃圾收集器最终会删除该Table,并复用它的内存。

    所有Table都可以有不同类型的索引来访问value值,当需要容纳新条目时,Table会自动增长。

a = {} --空的table
-- 创建1000个新条目
for i = 1, 1000 do a[i] = i*2 end
print(a[9])  --> 18
a["X"] = 10
print(a["X"]) -->10
print(a["y"]) -->nil  当table的某个元素没有初始化时,他的内容就是nil。另外可以像全局变量一样,将nil赋予table的某个元素来删除该元素。(Lua中,全局变量也是存储在一个普通的table中)

    为了表示一条记录,可以将字段名作为索引。lua中有“语法糖”的概念:

a["name"]  ==  a.name

    若是要表示一个传统的数组或线性表,只需以整数作为key来使用table即可。Lua中数组通常以“1”作为索引的起始值。

     在Lua5.1中,长度操作符“#”用于返回一个数组或线性表的最后一个索引值!

     对于所有未初始化的元素的索引结果都是nil。Lua将nil作为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操作符会认为这些nil元素就是结尾标记。如果需要处理那些含有“空隙”的数组,可以使用函数table.maxn,它将返回一个table的最大正索引数:

a = {}
a[10000] = 1
print(table.maxn(a))  ---》10000

    当对索引的实际类型不是很确定时,可以明确地使用一个显示的转换:

i = 10 j = "10"  k = "+10"
a = {}
a[i] = "one value" 
a[j] = "another value" 
a[k] = "yet another value" print(a[j]) --->another value
print(a[k]) --->yet another value
print(a[tonumber(j)]) --->one value


转:https://my.oschina.net/u/223340/blog/289115



推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
author-avatar
gql199111
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有