lua数据类型的的操作(三)
上一章我们学习了lua的数据类型,以及语法的定义,今天我们学习lua的数据类型操作,其实就是lua库一些api的操作,遇到对数据类型处理时,可以根据lua库提供的操作来实现。
一.字符串操作
1.字符串的三种表现形式
string1 = "字符串表现形式1"
string2 = '字符串表现形式2'
string3 =[[字符串表现形式3]]
print(string1)
print(string2)
print(string3)
2.字符串操作
s1 = "abc";
s2 = "ABC";
s3 = "aaadc";
s4 = "hello lua"; -- 转换成大写
print("字符串的大写转换:",string.upper(s1)); --- ABC -- 转换成小写
print("字符串的小写转换:",string.lower(s2)); --- abc -- 字符串的替换
print("字符串的替换:",string.gsub(s3,"a","b")); --- bbbdc -- 搜索:在一个字符串中搜索指定的内容(第三个参数为要查找的字符串的索引位置从哪里开始)
print("查找字符串中的内容:",string.find(s4,"ua",)); --- 8 9
--print("查找字符串中的内容:",string.find(s4,"lua",8)); --- nil -- 反转:
print("字符串的反转:",string.reverse(s4)); --- aul olleh -- 字符串的格式化:
print(string.format("the value is:%d ",)); --- the value is:4 -- 将整型数字转换成字符,并连在一起
print(string.char(,,,)) --- abcd -- 转换字符为整数值
--对于1个字符串默认转化第1个,当有第2个参数指定时,按指定的转化
print(string.byte("ABCD")) --- 65
print(string.byte("ABCD",)) --- 68 -- 字符串的长度
print("字符串的长度是:",string.len("abcd")) --- 4 -- 复制字符串
-- 根据第2个参数,复制固定次数的字符串
print("复制字符串:",string.rep("abcd",)) --- abcdabcd -- 连接2个字符串
print("xiaoi".." robot") --- xiaoi robot -- 返回迭代器函数
-- 对1个字符串的的字符,按第2个参数进行匹配,如果匹配成功返回数值
-- 如果没有匹配成功,则返回nil
-- 这里的%a 是与任何字母配对,"+" 号表示将匹配的一个字符串中的字符连接起来
for word in string.gmatch("Hello Lua user", "%a+") do
print(word)
end -- match 匹配字符串中第1个配对的字符串,参数init可选
-- 指定搜索过程的的起点,默认为1
-- 注意,这里只匹配第1个符合的字符串
print(string.match("I have 2 questions for you","%d %a+",));
3.数组操作
注意数组与表的不同,数组中存相同的元素,而表是可以根据key存不同的值,数组就是普通的数组,而表有点类似于java中的map,但它又不是map
-- 1.一维数组
print("======== 数组 =======")
array ={"lua","java"}
for i = , do
print(array[i])
end
4.迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。
在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
-- 1.泛型迭代器 for array = {"java","lua"}
for key, val in pairs(array) do
print(key,"=",val);
end -- for执行过程:
-- 首先,初始化in 后面的表达式的值,表达式返回for需要的三个值:
-- 迭代函数 状态常量 控制常量
-- (个人理解:控制常量:类似于java中iterator中的hasNext,控制调用的次数)
-- (个人理解:状态常量:类似于java中iterator中的next)
-- 第2步:控制常量 和状态常量作为参数调用迭代函数
-- 第3步:将迭代函数的返回值返回给变量列表(key,val)
-- 第4步:如果返回的第1个值为nil循环结束,否则招行循环体
-- 第5步:回到第二步再次进行迭代 -- 在Lua中我们常常使用函数来描述迭代器每次调用函数返回集合的下一个元素
-- lua 中的迭代器包含2种类型:
-- 无状态迭代器 (ipairs 函数)
-- 多状态迭代器 -- 无状态迭代器
function square(iteratorNum,currentNum)
if currentNum < iteratorNum then
currentNum = currentNum +
return currentNum,currentNum * currentNum;
end
end for key , doubleKey in square,, do
print(key,doubleKey)
end -- 多状态迭代器
-- 很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量
-- 最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 table 内
-- 将 table 作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在
-- table 内,所以迭代函数通常不需要第二个参数 array = {"java","lua","scala"}
function elementIterator(tab)
local index = ;
local count = #tab;
-- 闭包函数
return function()
index = index +;
if index <= count then
-- 返回迭代器的当前元素
return tab[index]
end
end
end for element in elementIterator(array) do
print(element)
end -- 多状态迭代器其实就是自己定义的函数来遍历元素,对遍历中的元素状态是可控的
lua数据类型的的操作(三)的更多相关文章
- Lua学习三----------Lua数据类型
© 版权声明:本文为博主原创文章,转载请注明出处 Lua数据类型 - Lua是动态类型语言,不需要为变量定义类型,只需要为变量赋值 - Lua有8中基本数据类型:nil.boolean.number. ...
- Lua数据类型
[1]Lua数据类型 Lua语言共有8种基本类型 [1] nil 空.最简单,有且仅有值nil,表示一个无效值(在条件表达式中相当于false) [2] boolean 布尔.包含两个值:false和 ...
- Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝
一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...
- lua数据类型与变量
Lua数据类型与变量 Lua中有 8个基本类型分别为: nil.boolean.number.string.userdata.function.thread和 table. lua变量三种类型:全局 ...
- (四)tensorflow-基础(数据类型,张量操作,数学运算)
摘要: 1.数据类型:标量.向量.矩阵.张量 :数值精度:变量(张量) 2.张量操作:索引.切片.维度操作 3.数学运算:加减乘除(整除和余除):乘方(平方.开方.指数):自然底对数(任意底对数需要 ...
- lua 数据类型
lua 数据类型 8 种数据类型 类型 说明 nil 空类型 boolean 布尔类型 number 数值型, 浮点型 string 字符串 function 函数 userdata 用户自定义结构 ...
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
随机推荐
- .NET调用AS/400上的程序(.NET CALL AS/400 PGM)
http://www.3rgb.com/entry/dotnet_call_as400_program2 .NET连接AS400出现[Safe handle has been closed http: ...
- 二十八、CentOS系统光盘安装、anaconda概述
常见问题你会感觉 tftp timeout: 防火墙 time out script: 网关没有指定,在dhcpd.conf中 不能下载:vmlinuz和initrd程序和安装的系统版本不一致 内存必 ...
- CF1053E Euler tour
题意 给出一个某些位置不全的欧拉序,求出一个符合条件的,或输出不行 传送门 \(n \le 5*10^5\) 思路 终于不是一道神仙\(dp\) 变成了一道神仙构造 以下简称两相同数围成的是一个区间, ...
- 解决ScrollView中Recyclerview显示不全,滑动不流畅的问题
这个问题经常会碰到,看了下网上关于这个问题的解决方案,有很多都是复制粘贴的,并不能根本解决问题 比较有效的一种方案是在Recyclerview的外层套一个RelativeLayout 然后设置recy ...
- Multiline f-strings
多行字符串使用fstring需要注意每行都要加fstring >>> name = "Eric" >>> profession = " ...
- CPU、io、mem之间的关系
https://blog.csdn.net/weixin_38250126/article/details/83412749 https://blog.csdn.net/joeyon1985/arti ...
- /proc/sys/kernel/sysrq /proc/sysrq-trigger----强制重启/触发器
LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger----触发器 ttp://blog.csdn.net/beckdon/article/det ...
- js获取本地ip
function getUserIP(onNewIP) { // onNewIp - your listener function for new IPs //compatibility for fi ...
- Invoke-customs are only supported starting with Android O (--min-api 26) Message{kind=ERROR,……
https://www.jianshu.com/p/434928537a90 在我使用构建版本gradle 26但是在将buildtoolsversion更改为27之后,就像这个图像 错误:e ...
- 树莓派根分区扩展至整张sd卡
第一步,安装raspi-config sudo apt-get install raspi-config 第二步,运行raspi-config sudo raspi-config 界面选择,Expan ...