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支持五种数据类型 ...
随机推荐
- 002_C/C++笔试题_简单算法程序
(一)冒泡排序法 #include <iostream> using namespace std; void bubblesort(int a[], int m); int main(vo ...
- js中错误处理机制
1.基本知识 1. 错误对象 Error,SyntaxError,RangeError, ReferenceError,TypeError,URIError 上面的都是构造函数: new 命令可以生成 ...
- vue中父组件如何监听子组件值的变化
vue中我们会遇到很多父子组件通信的需求, 下面简单列一下,父子组件通信的几种情况 1:父组件向子组件传值:使用prop向子组件传值: 2:子组件实时监听父组件传来的值的变化:使用watch去监听父组 ...
- Irrlicht引擎剖析二
- AGC009C Division into Two
题意 有\(n\)个严格升序的数,请你分成两个集合\(A\)和\(B\),其中一个集合任意两数之差不小于\(x\),另一集合任意两数之差不小于\(y\). 问方案数,集合可以为空. $n \le 10 ...
- Java连接Memcached进行CRUD
参考这篇博文在本机安装了Memcached 在 Java 中常用的memcached有三个: Memcached Client for Java SpyMemcached XMemcached 这里使 ...
- this关键字的用法小结
1.this :指它所在函数所属对象的引用. 简单说:哪个对象调用this所在的函数,this就指哪个对象. 主要是为了区分:成员变量和局部变量 2.构造函数之间的调用用this关键字,如,this( ...
- CF1208B
CF1208B 题意: 给出n个数字,找出最小的一端连续区间进行删除操作,使其剩余元素不含重复元素,求要删除的最小区间长度 解法: 删除子段后,前缀和后缀保持不变,可能长度为0.让我们修复不包含任何重 ...
- DLL:操作数据库和表
1. 操作数据库 C(Create 创建) R(Retrieve 查询) U(Update 更新) D(Delete 删除) (1) 查询数据库 1) 查询所有数据库名称 SHOW DATABASES ...
- spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
最近在搭spring项目框架的时候,遇到一个很伤的问题,翻了很多帖,都报告说什么少spring-context包啊之类的,但实际上spring的那些依赖我根本没漏,下面是我的pom: <depe ...