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 ...
随机推荐
- Linux之shell编程函数使用
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 原文和作者一起讨论:http://www.cnblogs.com/int ...
- Mongodb Geo2d索引原理
作者:孔德雨 MongoDB的geo索引是其一大特色,本文从原理层面讲述geo索引中的2d索引的实现. 2d 索引的创建与使用 通过 db.coll.createIndex({"lag&qu ...
- WPF 中使slide控件拖动完成后改变变量值
这个问题一开始觉得还是挺简单的,网上也看到不少解决方案. 首先一个最简单最直接的方案就是自定义一个名为FinalValue的依赖属性.随后重载OnThumbDragCompleted函数,在Thumb ...
- SpringMVC基础学习(二)—开发Handler
一.Handler开发 Handler的开发方式在springmvc中有多种,下面我们主要讲解三种实现方式:实现Controller接口.实现HttpRequestHandler接口. ...
- Visual Studio中的TabControl控件的用法
今天遇到了一个自己没遇到过的控件TabControl控件,所以找了点关于它的资料 TabControl属性 DisplayRect:只定该控件客户区的一个矩形 HotTrack:设置当鼠标经过页标签 ...
- Java 静态代理与动态代理
代理模式 设想你的项目依赖第三方,但是你需要对其接口做一些数据检验.性能数据记录.异常处理等,合适的方法就是使用设计模式里的代理模式. 代理模式是常用的java设计模式,代理类与委托类有同样的接口,代 ...
- DHTMLX 修改方法加参数
dhtmlx下拉框选项过长,导致显示不全,所以在下拉框里加了title 具体方法如下: dhtmlXCombo.prototype.modes.checkbox.render=function(c, ...
- Java程序初始化的顺序
Java程序初始化的顺序 java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块.构造函数等),他们执行的顺序如下: 父类静态变量 父类静态代码块 子类静态变量 子类静态代码块 父类非 ...
- Java Comparator的范型类型推导问题
问题 在项目中,有一处地方需要对日期区间进行排序 我需要以日期区间的开始日为第一优先级,结束日为第二优先级进行排序 代码 我当时写的代码如下: List<Pair<LocalDate, L ...
- Atom手动安装插件和模块的解决方案
最近开始使用Atom编辑器写作.为了预览带LaTeX公式的markdown文档,尝试安装插件markdown-preview-plus,但是总是失败.经过仔细查看错误输出和网上相关问答,发现尽管报错为 ...