上一章我们学习了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. 对象(Object)相关

    详情参考 1.对象的表示方法 js原生提供Object构造函数.js中所有的对象都是Object的实例. 定义一个对象最简单的就是var obj = {}; ES6属性和方法允许简写.对象的super ...

  2. 配置apt源

    vim /etc/apt/source.list 配置完成后执行 apt update apt upgrade 配置完源之后,就可以在源中所有想要的包 apt search xxx 本地自带的源配目录 ...

  3. bzoj2725

    * 给出一张图 * 每次删掉一条边后求 the shortest path from S to T * 线段树维护最短路径树 * 具体维护从某点开始偏离最短路而到达 T 的最小距离 * 首先记录下最短 ...

  4. 2018 Nowcoder Multi-University Training Contest 1

    Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...

  5. 【概率论】2-1:条件概率(Conditional Probability)

    title: [概率论]2-1:条件概率(Conditional Probability) categories: Mathematic Probability keywords: Condition ...

  6. Android原生编解码接口 MediaCodec 之——踩坑

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/gb702250823/article/d ...

  7. jumpserver官方手动安装

    测试环境 CPU: 64位双核处理器 内存: 4G DDR3 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6 环境 系统: CentOS 7 IP: 192.168 ...

  8. ImportError: No module named pytz

    xxx@hostname:/opt/xx/cc$ python manage.py runserver Traceback (most recent call last): File , in < ...

  9. saltstack运维工具

    salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...

  10. leveldb源码分析之Slice

    转自:http://luodw.cc/2015/10/15/leveldb-02/ leveldb和redis这样的优秀开源框架都没有使用C++自带的字符串string,redis自己写了个sds,l ...