上一章我们学习了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数据类型的的操作(三)的更多相关文章

  1. Lua学习三----------Lua数据类型

    © 版权声明:本文为博主原创文章,转载请注明出处 Lua数据类型 - Lua是动态类型语言,不需要为变量定义类型,只需要为变量赋值 - Lua有8中基本数据类型:nil.boolean.number. ...

  2. Lua数据类型

    [1]Lua数据类型 Lua语言共有8种基本类型 [1] nil 空.最简单,有且仅有值nil,表示一个无效值(在条件表达式中相当于false) [2] boolean 布尔.包含两个值:false和 ...

  3. Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝

    一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...

  4. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  5. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  6. lua数据类型与变量

    Lua数据类型与变量 Lua中有  8个基本类型分别为: nil.boolean.number.string.userdata.function.thread和 table. lua变量三种类型:全局 ...

  7. (四)tensorflow-基础(数据类型,张量操作,数学运算)

    摘要: 1.数据类型:标量.向量.矩阵.张量  :数值精度:变量(张量) 2.张量操作:索引.切片.维度操作 3.数学运算:加减乘除(整除和余除):乘方(平方.开方.指数):自然底对数(任意底对数需要 ...

  8. lua 数据类型

    lua 数据类型 8 种数据类型 类型 说明 nil 空类型 boolean 布尔类型 number 数值型, 浮点型 string 字符串 function 函数 userdata 用户自定义结构 ...

  9. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

随机推荐

  1. MySQL Group Replication-MGR集群简介

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  2. 参数类型 (@Controller层)

    @RequestMapping(path = "/listPage")@SuppressWarnings("unchecked")@BussinessLog(v ...

  3. LibreOJ #6000. 「网络流 24 题」搭配飞行员

    二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员 /* LibreOJ #6000. 「网络流 24 题」搭配飞行员 二分图最大匹配 Dinic最大流 + 当前弧优化 */ ...

  4. cc.Sprite组件

    1.精灵 精灵(Sprite)是Cocos系列的核心概念之一,是Cocos Creator最常用的显示图像的组件. 游戏中显示一个图片,我们就可以把这个叫做"精灵" sprite, ...

  5. jacky解读麻省理工《计算机科学与Python编程导论》第1集

    文:@数据分析-jacky(朱元禄) (一)导言 本课程讲的中心思想就是五个字:计算机思维 Python只是辅助工具,是辅助大家理解计算机思维,仅此而已 急功近利是人性,适得其反是结果:我们看到有很多 ...

  6. CF1208A

    CF1208A 题意: 就是把斐波那契数列的+改成异或,求第n项的值. 解法: 又是一个人类智慧题,打表找规律. 可以发现答案在 $ a,b,a⊕b $ 三个数中循环 CODE: #include&l ...

  7. 微信小程序开发-踩坑

    异步请求处理 详情描述: 微信小程序的wx.request({})请求时异步处理,以下代码 wx.reuest({ url:"https://XXXA", method:" ...

  8. django报错TypeRError:__init__() missing 1 required positional argument: 'on_delete'

    在添加外键的时候,在括号里添加on_delete=models.CASCADE即可 on_delete=models.CASCADE是级联删除的意思,意思就是说当你更新或删除主键表,那外键表也会跟随一 ...

  9. Mybatis按照SQL查询字段的顺序返回查询结果,使用resultType="java.util.LinkedHashMap"

    在使用Mybatis开发时,Mybatis返回的结果集就是个map,当返回map时只需要做好SQL映射就好了,减少了代码量,简单便捷,缺点是不太方便维护,但是写大量的vo类去返回也挺累的,这个看你个人 ...

  10. 安装Chrome扩展程序xpath

    最近工作用到xpath,直接从浏览器复制下来路径时常会出错而且长度很长,于是我想到之前用过的一款chrome插件,可以直接编写xpath语句,并实时出现解析出的结果,检验xpath语句是否编写正确.效 ...