上一章我们学习了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. 团队开发前端VUE项目代码规范

    团队开发前端VUE项目代码规范 2018年09月22日 20:18:11 我的小英短 阅读数 1658   一.规范目的: 统一编码风格,命名规范,注释要求,在团队协作中输出可读性强,易维护,风格一致 ...

  2. JVM相关面试

    来源:老码农 ,lingsui.github.io/2018/03/30/JVM面试题/   1.你知道哪些或者你们线上使⽤什么GC策略?它有什么优势,适⽤于什么场景? 参考 触发JVM进行Full ...

  3. tinymce实现ctrl+v粘贴word图片并上传

    tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...

  4. junit3和junit4的使用区别如下

    junit3和junit4的使用区别如下1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase2.在JUnit3中需要覆盖TestCase中的setUp和te ...

  5. [Luogu] 矩形覆盖

    https://www.luogu.org/problemnew/show/P1034 数据太水 爆搜过掉 #include <iostream> #include <cstdio& ...

  6. c++ 容器反转并且拷贝到一个新容器中

    // reverse_copy example #include <iostream> // cout #include <algorithm> // reverse_copy ...

  7. 图解Linux进程间通信实现原理(1)

    为Linux应用程序的开发人员,对Linux的进程间通信方式肯定是了如指掌,平时的开发中应该会大量的使用到.当你迅速的在键盘上按下[CTRL+C]终止掉一个正在运行中的命令时,你有没有仔细的思考过背后 ...

  8. 如何卸载oracle11g

    方法/步骤   .关闭oracle所有的服务.可以在windows的服务管理器中关闭:   打开注册表:regedit 打开路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ...

  9. JS模拟Touch事件

    var ele = document.getElementsByClassName('target_node_class')[0] //may have x and y properties in s ...

  10. JAVA导入支持类

    导入支持类(可以是JDK基础类或者自己编写的类),可以供本类调用方法和属性. java中import用法: 1.单类型导入(single-type-import),例如import java.io.F ...