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 ...
随机推荐
- layout_weight相关知识
之前使用layout_weight都是在layout_width或layout_height为0dp的时候,都没出现什么问题,但是无意间看到了如果设为match_parent会出现不同效果记录一下. ...
- Spark入门实战
星星之火,可以燎原 Spark简介 Spark是一个开源的计算框架平台,使用该平台,数据分析程序可自动分发到集群中的不同机器中,以解决大规模数据快速计算的问题,同时它还向上提供一个优雅的编程范式,使得 ...
- 深度学习的2016: NIPS 2016速览
With best wishes for a happy New Year! NIPS(Nerual Information Processing Systems)是人工智能.机器学习领域的顶级学术会 ...
- Opencv4android的Android Studio项目配置及实例下载
因为软件竞赛的项目会用到Opencv fo rAndroid,所以就研究了一下如何在Android Studio上配置Opencv4Android 环境概述: Android Studio 2.3 O ...
- AFNetworking 用法详解
之前一直使用ASIHttpRequest 做网络请求 ,后来新公司用AFNetWorking ,经过一段时间学习总结一下二者的优缺点: 1.AFNetWorking的优缺点 优点: 1.维护和使用者比 ...
- 使用live555 在linux下搭建 rtsp server
系统环境 Debian 7 x64 / centos 7 x64 都可以 首先去下载源码 http://www.live555.com/liveMedia/public/live555-lates ...
- .net core CLI(创建VueJS||Angular结合的项目)
net core cli 是快速创建模板项目 安装CLI 参考: https://www.hanselman.com/blog/dotnetNewAngularAndDotnetNewReact.as ...
- python中str的find()
今天学习语法的时候发现字符串自带函数find和操作符in功能十分近似,几乎一模一样 if 'a' in name: print 'Yes, it contains the string &quo ...
- Play学习 - 体验网页模板
在经过无数个尝试后,最终用sbt把play所依赖的所有包都下载下来了,现在可以非常快速编译运行了.今天体验了下网页模板,觉得非常不错,在这里做个简单的介绍. 原文说明: A Play Scala te ...
- Android VideoView使用小记
在Android中播放视频一般采用VideoView,当然也可以自己使用MediaPlayer+SurfaceView,但是比较麻烦.这里记录一些我使用VideoView时的疑惑 1.如何监听播放完成 ...