Lua学习(1)——table
table类型实现了“关联数组”。“关联数组”是一种具有特殊索引方式的数组。不仅可以通过证书来索引它,还可以使用字符串或其他类型(除了nil)来索引它。table是Lua中主要的数据结构机制(事实也是仅有的),具有强大的功能。基于table可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。
table的特性:
- table是一个“关联数组”,数组的索引可以是数字或者是字符串
- table 的默认初始索引一般以 1 开始
- table 的变量只是一个地址引用,对 table 的操作不会产生数据影响
- table 不会固定长度大小,有新数据插入时长度会自动增长
先看table的简单的例子:
> a={} //空table
> k="x"
> a[k]=10
> print(a[k])
10
> a["x"]=a["x"]+1 //自增
> print(a["x"])
11
Lua提供了更简单的”语法糖“(syntactic sugar)
a.x=10 --print(a["x"]=10)
print(a.x) --等于print(a["x"])
table循环读入
for i=1,5 do
a[i]=io.read()
end
table循环输出
for i=1,#a do
print(a[i])
end
#a表示table a最后一个索引
table 的方法函数
1. concat
函数 table.concat 主要用来把表里的每个元素通过一个分隔符(separator)连接组合起来,语法如下:
table.concat(table, sep, start, end)
sep、start、end 这三个参数都是可选的,并且顺序读入的,如果没指定传入,函数 concat 会采用默认值(分隔符 sep 的默认值是空字符, start 的默认值是 1, end 的默认值是数组部分的总长)去执行。
> tbl = {"one", "two", "three", "four"}
> print(table.concat(tbl))
onetwothreefour
> print(table.concat(tbl, " "))
one two three four
> print(table.concat(tbl, " ", 2))
two three four
> print(table.concat(tbl, " ", 2, 3))
two three
字符连接还有".."方式
a=a.."two"
2. insert
函数 table.insert 用于向 table 的指定位置(pos)插入一个新元素,语法:
table.insert(table, pos,value)
pos插入位置,可选项
> a={"one","two"}
> table.insert(a,"three")
> print(table.concat(a," "))
one two three
3. remove
语法:
table.remove (tb,pos)
参数 pos 可选,默认为删除 table 最后一个元素,并且参数 pos 的类型只能是数字 number 类型。
> tb={"one","two","three","four"}
> table.remove(tb,1)
> print(table.concat(tb," "))
two three four
> table.remove(tb)
> print(table.concat(tb," "))
two three
4.maxn
函数 table.maxn 是返回 table 最大的正数索引值,语法:
table.maxn(tb)
>tb={"one","two","three"}
> table.maxn(tb)
> print(table.maxn(tb))
3
5. sort
函数 table.sort 用于对 table 里的元素作排序操作,语法
table.sort(table,comp)
comp是一个比较函数
>tb={"one","two","three"}
> sort_comp = function(a, b) return a > b end
> table.sort(tb,sort_comp)
> print(table.concat(tb," "))
two three one
6. unpack
函数 table.unpack 用于返回 table 里的元素,语法:
unpack(table, start, end)
参数 start 是开始返回的元素位置,默认是 1,参数 end 是返回最后一个元素的位置,默认是 table 最后一个元素的位置,参数 start、end 都是可选
> a = {"one","two","three"}
> print(unpack(a))
one two three
> print(unpack(a,2))
two three
> print(unpack(a,2,3))
two three
7. pack
函数 table.pack 是获取一个索引从 1 开始的参数表 table,并会对这个 table 预定义一个字段 n,表示该表的长度, 语法:
table.pack(···)
该函数常用在获取传入函数的参数。
#!/usr/local/bin/lua
function table_pack(...)
args = pack(...)
print(args.n)
tmp={"one","two"}
print(tmp.n)
end
table_pack("test","arg2","arg3")
Lua学习(1)——table的更多相关文章
- lua学习之table类型
关系表类型,这是一个很强大的类型.我们可以把这个类型看作是一个数组.只是 C语言的数组,只能用正整数来作索引: 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil.同样,在C语言中 ...
- lua学习项目笔记
这几天草草的浏览了一下电子版的<lua程序设计>,没有懂的地方就自动忽略了,挑拣了一些可以理解的部分一直在推进.推进至后面的时候已经浑浑噩噩的了,有种想看完这本书的强迫症的感觉.推进CAP ...
- [转]LUA 学习笔记
Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...
- Lua学习笔记(二):基本语法
Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.or ...
- Lua 学习笔记(一)
Lua学习笔记 1.lua的优势 a.可扩张性 b.简单 c.高效率 d.和平台无关 2.注释 a.单行注释 -- b.多行注释 --[[ --]] 3.类型和 ...
- lua学习:使用Lua处理游戏数据
在之前lua学习:lua作配置文件里,我们学会了用lua作配置文件. 其实lua在游戏开发中可以作为一个强大的保存.载入游戏数据的工具. 1.载入游戏数据 比如说,现在我有一份表单: data.xls ...
- Lua学习笔记:面向对象
Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...
- lua学习之类型与值篇
类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 type 可以返回这个值的类型的名称 将一个变量用于不同类型,通常会导致混乱的代码 但合理 ...
- Lua学习高级篇
Lua学习高级篇 之前已经说了很多,我目前的观点还是那样,在嵌入式脚本中,Lua是最优秀.最高效的,如果您有不同的观点,欢迎指正并讨论,切勿吐槽.这个系列完全来自于<Programming in ...
- LUA 学习笔记
1.C# 与 LUAC#调用LUA比较简单,但LUA调用C#,有两种方法,一种是直接反射调用,但这种方法有局限性,比如性能低,在IOS平台无法使用反射,因此一般使用WARP方法,即把C#代码注册到LU ...
随机推荐
- eclipse中配置drools6.5环境
1.去官网下载两个压缩包 2.解压两个压缩包,依次进入droolsjbpm-tools-distribution-6.5.0.Final\droolsjbpm-tools-distribution-6 ...
- zoom动画,实现图片点击预览效果
参考:https://developer.android.google.cn/training/animation/zoom.html 1.创建Views 下面的布局包括了你想要zoom的大版本和小版 ...
- CSS3——复杂选择器
今天把视频里的CSS3复杂选择器部分看完了,来整理一下学到的知识点. 1.兄弟选择器:同一位置级别,可称为兄弟元素 a.相邻兄弟选择器:next紧紧跟在[当前元素之后的](一个),指定选择器的元素 ...
- asp.net core源码飘香:Logging组件
简介: 作为基础组件,日志组件被其他组件和中间件所使用,它提供了一个统一的编程模型,即不需要知道日志最终记录到哪里去,只需要调用它即可. 使用方法很简单,通过依赖注入ILogFactory(Creat ...
- oracle分区表的建立方法(包含已经存在的表要分区)分享,非常好
非原创 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracle的分区表可 ...
- Spring Boot 中如何使用 Dubbo Activate 扩展点
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司的核心竞争力在于创新 – <启示录> 』 继续上一篇:< Spri ...
- 【Tomcat源码学习】-1.概述
Tomcat是用java语言开发的一个Web服务器,最近花了差不多两周时间对Tomcat 9.0源码进行了一遍学习,由于知识储备有限,也只是理解了一个大概,下面就由我来给大家分享一下我对Tomcat的 ...
- 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(1)-总体介绍
前言 近几年一直从事电子政务和企业管理软件的外包开发工作,深感开发技术更新之快,尤其随着移动互联网的发展,前端技术发展更是一日千里. 现在随便一个项目都要求多端使用(PC+App+微信),如果没有一个 ...
- 从花式swap引出的pointer aliasing问题
上次,一个同学问我,你知不知道可以不用引入中间变量就可以实现swap? 我说,我知道,可以用加减法或者异或实现,像是这样 void mySwap(int &x,int &y) { x= ...
- CSS空白符处理!
在CSS中有一个非常重要但对于初学者又非常容易忽略的属性: white-space:nowrap; //文本不换行属性 这里附带说一下W3Cschool中对white-space的解释: white- ...