一,lua字符串

 
单引号间的一串字符。
双引号间的一串字符。
[[和]]间的一串字符。
 
1.几个常用的转义字符
\b 退格
\f 换页
\n 换行
\r 回车
\t 跳到下一个tab位置
\0 空格
 
2.字符串操作
 
(1) string.upper(argument): 字符串全部转为大写字母。
(2) string.lower(argument): 字符串全部转为小写字母。
(3) string.gsub(mainString,findString,replaceString,num)
在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),如:
> string.gsub("aaaa","a","z",3);
zzza 3
 
(4)string.find (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
> string.find("Hello Lua user", "Lua", 1) 7    9
(5)string.reverse(arg)
字符串反转
> string.reverse("Lua")
auL
(6)string.format(...)
返回一个类似printf的格式化字符串
> string.format("the value is:%d",4) the value is:4
(7)string.char(arg) 和 string.byte(arg[,int])
char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
string.char(97,98,99,100) abcd string.byte("ABCD",4) 68 string.byte("ABCD") 65
 
(8)string.len(arg)
计算字符串长度。
string.len("abc") 3
 
(9)string.rep(string, n)
返回字符串string的n个拷贝
> string.rep("abcd",2) abcdabcd
 
(10).. 连接两个字符串
(11) string.gmatch(str, pattern)
回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
for word in string.gmatch("Hello Lua user", "%a+") do
print(word)
end Hello Lua user
(12)string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
> = string.match("I have 2 questions for you.", "%d+ %a+") 2 questions
 
format的格式化参考lua字符串格式化定义。
 

二,数组

1.一维数组
tab ={"12","34","abcd"}
 
2.多维数组
多维数组即数组中包含数组或一维数组的索引键对应一个数组。
 
 

三,迭代器

 
1.泛型for迭代器
泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。
泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:
for k, v in pairs(t) do print(k, v) end
 
 
2.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。Lua 的迭代器包含以下两种类型:
无状态的迭代器
无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。
每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。
这种无状态迭代器的典型的简单的例子是ipairs
多状态的迭代器
很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到table内,将table作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在table内,所以迭代函数通常不需要第二个参数
四,table
构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:
-- 初始化表 mytable = {} -- 指定值 mytable[1]= "Lua" -- 移除引用 mytable = nil -- lua 垃圾回收会释放内存
 
table操作:
1.table.concat (table [, sep [, start [, end]]]): 连接两个table table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
如:
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))
 
2.table.insert (table, [pos,] value):在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
如:
fruits = {"banana","orange","apple"}
table.insert(fruits,"mango")
3.table.remove (table [, pos])返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
如:
table.remove(fruits) -- 删除最后一个元素
 
4.table.sort (table [, comp]) 对给定的table进行升序排序。
 
5.当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。
可以用这个函数获取table长度
function table_leng(t) local leng=0 for k, v in pairs(t) do leng=leng+1 end return leng; end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

lua基础学习(四)的更多相关文章

  1. Python基础学习四

    Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ...

  2. Mybatis基础学习(四)—关系映射

    一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders ...

  3. Node.js基础学习四之注册功能

    前言:在Node.js学习(二)和(三)中介绍了如何在Node.js 中获取登录的用户名和密码与数据库进行验证并返回数据给客户端 需求:实现注册功能 为了区分登录和注册是两个不同的请求,在端口后面加上 ...

  4. Salesforce Sales Cloud 零基础学习(四) Chatter

    Chatter是一个Salesforce实时协作应用程序,它允许你的用户一起工作.互相交谈和共享信息,不管用户角色或位置如何,连接.并激励用户在整个组织内高效工作. Chatter 让用户们在 Opp ...

  5. Lua 基础 -- 学习笔记

    标签(空格分隔): Lua 1. Lua可以一次性给多个变量赋值 变量比赋值多,多的变量就赋值nil 变量比赋值少,多的赋值舍弃 local a, b, c = 1, 2, 3 print( a, b ...

  6. Spring基础学习(四)—AOP

    一.AOP基础 1.基本需求      需求: 日志功能,在程序执行期间记录发生的活动. ArithmeticCalculate.java public interface ArithmeticCal ...

  7. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

  8. Struts2基础学习(四)—类型转换器和数据校验

    一.自定义类型转换器 1.概述      Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...

  9. 前端学习:html基础学习四

    7.HTML表格(主要内容<table><caption><tr><th><td>标记) <table>标记 基本格式 < ...

随机推荐

  1. vue 里面异步加载高德地图

    前言 关于Vue 里面使用异步加载高德地图 项目中其实只有几处需要用到地图,不需要全局引入 在index文件中引入js会明显拖慢首屏加载速度,虽然可以使用异步加载script的方式解决,但是始终觉得不 ...

  2. SQL SERVER 2008 设置字段默认值为当前时间

    在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...

  3. 一些简单题(2)(Source : NOIP历年试题+杂题)

    P3084 [USACO13OPEN]照片Photo 给出$m$个区间$[l_i,r_i]$覆盖$S=[1,n]$,试确定最大特殊点的数使得这每一个区间覆盖且仅覆盖一个特殊点. 如果无解,输出$-1$ ...

  4. redhat6.5 安装oracle11G

    一.安装依赖包 下面是Oracle数据库需要依赖的软件,依次执行下面命令,不存在则安装. yum install binutils yum install elfutils-libelf yum in ...

  5. 【Red Hat Linux基础】 磁盘分区详细教程

    https://blog.51cto.com/sunjie123/1687535 Linux中添加新硬盘后对硬盘的分区以及挂载 https://www.linuxidc.com/Linux/2018- ...

  6. JavaWeb-SpringBoot_使用H2数据库实现用户注册登录

    使用Gradle编译项目 传送门 前端资源同:使用MySQL数据库实现用户管理_demo 传送门 H2:SpringBoot内置持久化数据库  使用H2数据库实现用户注册登录 用户可以在index.h ...

  7. R_Studio(聚类)针对iris数据比较几种聚类方法优劣

    聚类分析 百度百科:传送门 聚类分析指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程 聚类与分类的不同在于,聚类所要求划分的类是未知的 聚类分析是一种探索性的分析,在分类的过程中,人们 ...

  8. Mac安装ipython与jupyter

    Python从Python发展而来,更倾向于科学计算.互联网数据分析更喜欢用. 首先切换root用户: sudo su - pip3自动安装ipython yuchaodeMacBook-Pro:~ ...

  9. C++入门经典-例6.17-输出每行数组中的最小值

    1:代码如下: // 6.17.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using ...

  10. @RepositoryRestResource注解的使用

    1.Build with Maven <?xml version="1.0" encoding="UTF-8"?> <project xmln ...