第二章数据与标准库

表格

表格是lua中唯一的数据结构。

--创建表格
x = 5
a = {}
b = { key = x, antherkey = 10 } --字符串做key
c = { [x] = b, ["string"] = 10, [34] = 10, [b] = x} --[x]=b,x是key,内容是表格b
--给表格赋值
a[1] = 20
a["foo"] = 50
a[x] = "bar"print(b["key"]) --5
print(b[key])--nil
print(c["string"])--10
print(c[34])--10
print(c[b])--5
print(c[x])--table:0x2467e50
print(c[5])--table:0x2467e50

这里a初始化为空表,b中字符串不加[]表示直接用字符串做key,从代码运行结果可以看出,在c中要想获取key为x的值,可以通过c[x]也可以通过c[x的值]两种方式。此外从c的定义可以看出可以用任何类型的数据做关键字,包括用表格。

Syntactic Sugar

可以通过如下方式访问和修改表格的数据:

t = {foo = 1,bar =2}
print(t.foo) --1
t.bar =3

数组和指针

在创建表格时,如果不设置key,而是直接这样定义:

a = {11,22,"foo","bar"}

也就相当于是定义了一个数组,此时,会按顺序给其分配key,从1开始分别,于是便可以这样修改表格:

a[3] = "foooo"

也可以这样访问表格数据:

print(a[1])--11
print(a[3])--foo
print(#a) --4

最后一行代码通过#获得表格a的长度。

Generic for Loop

a = {x = 400, y = 300, [20] = "foo"}
b = { 20, 30 ,40}
for key , value in pairs(a) doprint(key, value)
endfor index, value in ipairs(b) doprint(index, value)
end

pairs是一个迭代器,可以获得表格的关键字和值,而ipairs与pairs的作用一样,是ipairs只用于指针形式的表格(即不声明关键字的表格)它从1开始遍历直到遇到nil时。

表格上的一些操作

t = {24,25,8,13,1,40}
table.insert(t,50)--在表格末尾插入
table.insert(t,3,89)--在第3个位置插入
table.remove(t,2)--删去第2个位置的数据
table.sort(t)--将表格由小到大排序

字符串

字符串可以用单引号声明也可以用双引号,还可以用[[...]]声明多行字符串。

s = "foo\nbar"
t = 'he said "hello world"'
u = "Hello \"world\""
v = [[
<html><body><p>Hello world!</p></body>
</html>
]]

字符串操作

string.lower("HeLLO") -- hello 小写
string.upper("Hello") -- HELLO  大写
string.reverse("world") -- dlrow 逆反
string.char(87) -- W  数字变字符
string.sub("hello world", 2, 5) -- ello  子串

特殊的

string.gsub("hello 42", "(%d+)", "%1 3") -- hello 42 3

这里gsub(字符串s,模式p,替换t),在s中找到模式为p的子串,然后用t替换掉这部分。得到新的字符串,而gsub的返回值,不止包含替换之后的字符串,也包含替换的次数,两个数据。

而且“替换t”可以是字符串,也可以其他的模式,也可以是一个函数,比如:

-- 4 + 4 = 8
string.gsub("2 + 2 = 4", "(%d)", function(s)
return s * 2
end)

在上面的代码中,“替换t”就是一个函数,实现的结果就是将字符串中匹配模式p的部分执行函数s,每个数扩大两倍。

-- prints each word
for w in string.gmatch("good morning chaps", "%w+") do
print(w)
end

输出:

gmatch是返回查找到字符串的迭代器,gmatch(字符串s,模式p),gmatch找到字符串s匹配模式p的内容。

t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") dot[k]=v
end
for k, v in pairs(t) doprint(k, v)
end

输出:

参考链接:https://blog.csdn.net/u012654882/article/details/70766946

http://ebens.me/post/lua-for-programmers-part-2

https://blog.csdn.net/zhangxaochen/article/details/8085484

lua学习 第二章数据与标准库相关推荐

  1. cygwin编译生成hello world_自己动手实现Lua:虚拟机、编译器、标准库(一)——搭建开发环境...

    该系列是笔者在学习张秀宏编写的<自己动手实现Lua:虚拟机.编译器.标准库>过程中的笔记总结 开发环境 操作系统:MacOS 文本编辑器:IntelliJ IDEA2019.2.2 CE ...

  2. 计算机组成原理第二章数据,计算机组成原理第二章数据在计算机中的表示

    计算机组成原理第二章数据在计算机中的表示 (91页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 第二章 数据在计算机中的表示 n 概述 ...

  3. python程序设计第二章序列类型 题库及选解

    由于学校的python是笔试,所以找了份感觉比较好的题库刷了下其中前八章的填空和判断,附上选解.各章链接如下 python程序设计题库完整版 https://blog.csdn.net/lijia11 ...

  4. 深度学习 - 第二章 - 机器学习基础

    深度学习 - 第二章 - 机器学习基础 第二章 机器学习基础 2.1 各种常见算法图示 2.2 监督学习.非监督学习.半监督学习.弱监督学习? 2.3 监督学习有哪些步骤 2.4 多实例学习? 2.5 ...

  5. ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发

    为什么80%的码农都做不了架构师?>>>    ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发          前言:本篇主要讲述数据访问层的开发, ...

  6. 第二章 数据的表示和运算 2.1.2 BCD码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.2 BCD码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 8421/2421/余3码 转载 ...

  7. 信息学奥赛一本通(C++版)第二部分 基础算法 第二章 数据排序

    第二章 数据排序 T1310 : 车厢重组 时间限制: 1000 ms 内存限制: 65536 KB [题目描述]   在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工 ...

  8. Python爬虫学习第二章-1-requests模块简介

    Python爬虫学习第二章-1-requests模块简介   这一章主要是介绍requests模块的相关知识以及使用 1.requests模块简介: 概述:是python中原生的一款基于网络请求的模块 ...

  9. 第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 循环冗余校验码/ ...

  10. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 海明(Hamming) ...

最新文章

  1. 自动化测试工具Cucumber的简单介绍
  2. 转Redis性能测试
  3. 以云原生的名义,举办一次技术聚会
  4. centos oracle命令,CentOS7命令行方式搭建Oracle11gR2
  5. Linux系统高并发kernel参数优化
  6. formal method 2月23日第八课的内容!schema calculus!
  7. 设计思路工作笔记-使用当天时间戳的差值读取实时数据绕过错误数据
  8. 985毕业+数据分析师+做过名企项目+懂运营=跳槽失败???
  9. Codeforces Round #445 div.2 D. Restoration of string 乱搞
  10. 数据结构之基于Java的链接栈实现
  11. 如何实现自动化前端开发?
  12. Reveal查看任意app的高级技巧
  13. python bytes_Python bytes()
  14. 知识竞赛现场管理系统安装配置及使用疑难问题汇编
  15. 万圣节html代码大全,《方舟:生存进化》万圣节更新代码大全
  16. Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)...
  17. 2022CPA审计-第三编-各类交易和账户余额的审计-【完结-有点感觉了?】
  18. VisionPro控件的使用 C# 开发篇
  19. svn tour cycle
  20. 所谓的我对大学的目标与期望!!!

热门文章

  1. python不同目录下的调用
  2. NETDOM的几个用法
  3. 删除整个目录(API)
  4. 小米蓝牙左右互联_399元,真香!小米蓝牙耳机Air,同价位比有线体验还出色?...
  5. web前端项目实例网站_web前端网站性能优化方案
  6. emerald sword(打倒大魔王)
  7. webdriver 等待页面加载完成_Python+selenium自动化之等待
  8. 【2020牛客寒假基础算法训练营】第三场总结
  9. 【2019杭电多校第六场1008=HDU6641】TDL(思维)
  10. android桌面adw,ADW Launcher