Lua之table(表)
Lua table(表)
使用表来统一表示Lua中的一切数据,是Lua区分于其他语言的一个特色。这个特色从最开始的Lua版本保持至今,很大的原因是为了在设计上保持简洁。Lua表分为数组和散列表部分,其中数组部分不像其他语言那样,从0开始作为第一个索引,而是从1开始。散列表部分可以存储任何其他不能存放在数组部分的数据,唯一的要求就是键值不能为nil
。尽管内部实现上区分了这两个部分,但是对使用者而言却是透明的。使用Lua表,可以模拟出其他各种数据结构——数组、链表、树等。
虽然设计上简洁,并且对使用者更加透明、友好,但是如果使用不当,还会造成效率性能上的差异。
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。
构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
======================================================
序号 | 方法 & 用途 |
---|---|
1 |
table.concat (table [, sep [, start [, end]]]):
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。 |
2 |
table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾. |
3 |
table.maxn (table)
指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现) |
4 |
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。 |
5 |
table.sort (table [, comp])
对给定的table进行升序排序。 |
table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
-- 简单的table
mytable = {}
print("mytable 的类型是 : ", type(mytable))mytable[1] = "Lua"
mytable["wow"] = "修改前"print("mytable 索引为1 的元素是 : ", mytable[1])
print("mytable 索引为wow 的元素是 : ", mytable["wow"])--alternatable和mytable的是指向同一个table
alternatable = mytableprint("alternatable 索引为1 的元素是 : ", alternatable[1])
print("alternatable 索引为wow 的元素是 : ", alternatable["wow"])alternatable["wow"] = "修改后"print("mytable 索引为wow 的元素是 : ", mytable["wow"])-- 释放变量
alternatable = nil
print("alternatable 是 ", alternatable)-- mytable仍然可以访问
print("mytable 索引为wow 的元素是 : ", mytable["wow"])mytable = nil;print("mytable 是 " , mytable);
运行结果:
=========================================================================
table.insert (table, [pos,] value):在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
table.remove (table [, pos])返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
fruits = {"banana","orange","apple"}-- 在末尾插入
table.insert(fruits, "mango")
print("索引为4的元素为 : ", fruits[4]);--在索引为2的键处插入
table.insert(fruits, 2, "grapes")
print("索引为2的元素为 : ", fruits[2])print("最后一个元素为 : ", fruits[5])
table.remove(fruits)
print("移除后最后一个元素为 :",fruits[5])
运行结果:
=======================================================================
function table_maxn(t)local mn = 0;for k,v in pairs(t)doif mn < kthenmn = k;endendreturn mn;
endtb1 = {[1] = "a",[2] = "b",[3] = "c",[26] = "z",}
print("tb1 长度 : ", #tb1)
print("tb1最大值 : ", table_maxn(tb1))
运行结果:
后记:
Lua 元表(Metatable)
在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。
因此 Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。
转载于:https://blog.51cto.com/liam2199/1961897
Lua之table(表)相关推荐
- Lua 中 table(表) 的简单使用
Lua table(表) table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能 ...
- Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Lua - 输出打印table表
lua自带的print函数只能打印可转化为字符串的数据,如果打印table表的话,则会和打印函数和userdata类型数据一样,输出为内存地址的形式.工作中因项目需要,可打印table表的话,对bug ...
- Lua语言之table表
table有两种形式,数组形式与键值对形式. 一:table基本用法 1.table基本使用 ①初始化 table 表名 = {} ②赋值 数组形式: newTable[0] = "BeiJ ...
- Lua 的table遍历 【转】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1032925 ...
- Lua 中 table 库函数 table.concat 连接 函数
Lua 中 table 库函数 table.concat 连接 函数 do--> table.concat 连接 函数 tab = {"a", "c", ...
- lua之table的使用
本文对从数据结构,存储和使用三个角度对lua之table的使用进行小结. 数据结构: table是lua的一种数据结构,可以用来存放各种类型的元素,例如可以创建数组和字典,以及二者混合的数据结构, 例 ...
- lua 数组与表的异同
lua 数组与表的异同 在lua中,table是唯一的数据结构,通过表我们可以实现大部分的重要的数据结构,比如树,字典,当然,lua是没有表的,但是可以用表实现数组. 表 table不是值或者变量,而 ...
- MySql清空表的方法介绍 : truncate table 表名
清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...
最新文章
- python培训好学吗-Python爬虫培训好学吗?
- Docker中部署mysql后SpringBoot连接时提示表不存在(修改表名忽略大小写)
- Android的init过程:init.rc解析流程
- Mvc5 控制器,视图简单说明
- linux 检查mps版本,linux_mps启动流程_存储相关.doc
- 朝鲜 APT37被指发动软件供应链攻击,瞄准股票投资人
- C语言输出有趣的图形,c语言经典游戏程序源代码大全
- 扫雷win10_手把手教你玩扫雷
- 信号完整性(SI)电源完整性(PI)学习笔记(三十三)102条使信号完整性问题最小化的通用设计规则
- 07过去进行时,过去将来时,陈述句 变宾语从句(that 引导)
- ETS 题库 c java_最新ETS阅读真题56篇完整版(TPO+ETS在线试题+官方模拟题+OG)
- 厦门大学353卫生综合考研参考书目
- Bouncing Ball
- Vue中 $event not defined
- 新出炉彩色游戏——炸弹战争1.0版
- 制作linux只读文件系统,一种Squashfs只读根文件系统的远程升级方法及系统的制作方法...
- Revit二次开发之技能篇(一)———轴网自动对齐
- 使用Python 封装一个简单的Mysql工具类
- 音频对游戏玩家体验的影响有多大?
- python获取文件的绝对路径
热门文章
- Waymo无人卡车高调重返凤凰城,重点路测高速和主干道,但货运先机已失
- 活动报名 | 苏州工业园区领军人才项目申报宣讲对接会
- 吴恩达斯坦福实验室发布MRNet数据集,包含1千多张标注膝关节核磁共振成像
- 机器人终于有触觉了!甚至可以实现膝跳反射丨Science
- 小鹏汽车又有高管加盟,这次是前一汽技术研发院副院长刘明辉
- 钱盾率先提出的“全流程屏障”究竟是怎样的一种能力?
- 【SpringMVC学习11】SpringMVC中的拦截器
- android UI设计属性中英对照表(未修订)
- Tokyo Tyrant优势
- QuickLook 空格键预览文件工具