本帖最后由 Aitlo 于 2021-8-17 21:49 编辑
- -- 表(table)的定义
- --[[Table是lua的一种数据结构用来帮助我们创建不同的数据类型,如:数组、键值对、集合等
- lua(数组)的基本特征与定义
- lua(数组)的下标可以是负数
- lua的长度可以动态改变(与C#的固定长度数组不同),可以把lua数组认为是C#的List、Dictionary等集合类型。
- 把Table 当成一个“字典”集合来对待。也可以当成一个“数组”来对待,这要看如何来初始化表。
- --]]
- -- 定义一个简单的表
- tabMayArray = {}
- -- 输出
- print(tabMayArray) -- table: 02AC2090 表的地址
- -- 表的赋值
- tabMayArray = {11,22,88}
- print(tabMayArray[1]) -- 使用下标输出,注意:这要下标是从1开始的
- print(tabMayArray[2]) -- 使用下标输出
- print(tabMayArray[3]) -- 使用下标输出
- print(tabMayArray[0]) -- nil
- -- 定义“数组”类型的表
- tabMayArray2 = {10,20,30,88} -- 相当于“数组”类型
- -- 定义“键值对”类型的表
- tabMayArray3 = {str1="张三",str2="李四",str3="王五"}
- -- 输出
- print(tabMayArray3['str1']) -- 使用中括号输出
- print(tabMayArray3.str2) -- 使用“.”输出(类似C#中输出的属性)
- print(tabMayArray3.str3)
- --[[Table 集合,可以又“空表”、“直接声明定义表内容”、“声明表然后逐一赋值”等三种方式
- Table 集合,也可以定义类似“数组”的定义方式,其访问可以使用下标进行访问。(注意:lua 中没有数组的概念,就是表来表示)
- 访问table 中数据(“键值对”类型集合),可以直接用.符合访问,也可以使用中括号访问,但是一定要加字符串!(否则会报错)
- Table 中的索引,都是从1开始的。
- --]]
- -- 表的赋值与迭代输出
- --[[空表的赋值与迭代输出
- 字典类型表赋值与迭代输出
- 关于变量相互赋值的技术(引用传递)
- --]]
- -- 学习表的迭代输出(数组类型)
- tabMayArray4 = {12,20,3,50,66}
- --输出
- for i=1,4 do
- print(tabMayArray4[i])
- end
- -- 使用table 函数或者符合输出
- for i=1,#tabMayArray4 do -- 使用 “#”符合,得到表中数量
- print(tabMayArray4[i])
- end
- for i=1,table.getn(tabMayArray4) do -- 使用表内置函数,得到表的数量
- print(tabMayArray4[i])
- end
- -- 学习表的迭代输出(“键值对”类型)
- tabMayArray5 = {str1="张三",str2="李四",str3="王五"} -- 定义表,且表直接赋值
- tabMayArray5.str1 = '小明'
- tabMayArray5['str2'] = '小红'
- -- 输出
- for i=1,5 do
- print(tabMayArray5['str'..i])
- end
- -- 使用迭代器函数输出
- --[[ipairs 函数
- 输出连续数值
- pairs 函数
- 输出连续与非连续(键值对)数值
- “#” 符合,除了可以去的字符串长度,还可以取得表的长度。--]]
- -- 学习使用迭代器函数(ipairs,pairs)
- tabMayArray6 = {str1="张三",str2="李四",str3="王五"}
- for k,v in pairs(tabMayArray6) do
- print(k,v)
- end
- -- 输出字符串类型的数组
- tabMayArray7 = {'张三','李四','王五'}
- for k,v in ipairs(tabMayArray7)do
- print(v) -- 注意:一般数组类型的集合,可以输出v 即可。
- end
复制代码- -- 表的内置函数
- --[[table.getn() 得到表(数组类型)的长度个数
- 注意:本函数不能正确输出“键值对”类型表的长度个数。(“#”符合同理)
- table.concat() 表的链接。
- 功能:把表中的数据进行连接后输出(字符串)
- table.insert() 表的插入
- 注意:本函数中插入的位置数值,1表示开头位置,2表示第2数据块的位置插入。依次类推。
- table.remove() 表的移除
- 注意:默认移除最后的序号--]]
-
- -- 学习表的内置函数
- -- 得到表的长度
- tab1 = {'张三','李四','王五'}
- print(#tab1) -- 输出表的长度
- print(table.getn(tab1)) -- 输出表的长度
- -- 注意:对于“键值对”类型集合表,不能应用
- tab2 = {name1='张三',name2='李四',name3='王五'}
- print(#tab2) -- 输出结果: 0
- print(table.getn(tab2)) -- 输出结果: 0
- -- 学习表的链接,输出结果是字符串
- tab3 = {'张三','李四','王五'}
- str2=table.concat(tab3)
- str3=table.concat(tab3,'-') -- 添加一个分隔符 “-”
- str4=table.concat(tab3,'-',2,3) -- 添加一个分隔符 “-”,且输出指定序号内容字符串
- print(str2) -- 输出结果: 张三李四王五
- print(str3) -- 输出结果: 张三-李四-王五
- print(str4) -- 输出结果: 李四-王五
- -- 学习表的插入
- tab4 = {'hell','Hi','win'}
- -- 插入数据
- table.insert(tab4,2,'o')
- print(table.concat(tab4)) -- 输出结果:helloHiwin
- -- 学习表的移除
- tab5 = {1,2,3,4,5,6}
- table.remove(tab5)
- print(table.concat(tab5)) -- 输出结果:12345 不加指定序号 函数默认移除最后序号的数据
- table.remove(tab5,2)
- print(table.concat(tab5)) -- 输出结果:1345 加指定序号 移除指定序号数据
- --[[table.sort() 表的排序
- 注意:对于英文字符串类型,安装a、b、c、d...z的顺序,且先大写后小写的顺序。
- table.maxn() 得到表中最大数值,系统函数有bug。改为自定义函数。
- 注意:lua中,必须先定义函数,在调用,顺序不能返。--]]
-
- -- 学习表的排序
- tab6 = {5,6,9,7,10,5,2,1}
- table.sort(tab6)
- print(table.concat(tab6)) -- 输出结果:125567910
- tab7 = {'你好','河流','zoo','room','bus'}
- table.sort(tab7)
- print(table.concat(tab7)) -- 输出结果:busroomzoo河流你好
- -- 获取表中最大数值
- tabMaxArray = {12,30,55,1,50,66,100,120,5,3,999}
- -- 取得最大数值
- nMaxNumber = table.maxn(tabMaxArray) -- 输出了表的长度而不是表中最大的数值
- print('表中最大的数值='..nMaxNumber)
- -- 自定义求表中最大的一个函数
- -- 输入:‘tabParameter’:表类型的输入变量(如果不合法,则输出nil)
- -- 输出:表中最大数值
- -- 方法一
- function GetTableNumber1(tabParameter)
- if type(tabParameter) == 'table'then
- table.sort(tabParameter)
- return tabParameter[#tabParameter]
- else
- return nil
- end
- end
- MaxNumber = GetTableNumber1(tabMaxArray)
- print(MaxNumber) -- 输出结果:120
- -- 方法二
- function GetTableNumber2(tabParameter)
- n = 0
- if type(tabParameter) == 'table'then
- for k,v in pairs(tabParameter)do
- if v > n then
- n = v
- end
- end
- return n
- else
- return nil
- end
- end
- MaxNumber = GetTableNumber2(tabMaxArray)
- print(MaxNumber) -- 输出结果:120
复制代码
|