Lua表(table)的用法_个人总结

1.表的创建及表的介绍

--table 是lua的一种数据结构用来帮助我们创建不同的数据类型。如:数组和字典
--lua table 使用关联型数组,你可以用任意类型的值来做数组的索引,但这个值不能是nil
--lua table 是不固定大小的,你可以根据自己需要进行扩容
 array = {} --这是一个空表,初始化表 
--如果想从表中删除元素,只需要把想要删除的元素的值赋值为nil,即可
 --eg:array["name"] = nil

--如何将函数作为 表 的元素添加进去

 mm = {}
mm.myfc = function ()
print("数学不好学呀!")
end
print(mm.myfc())

-- 表其实是哈希表和数组的结合体

-- 数组的下表对应 lua表中的键 数组元素的值对应 是lua表中的值
-- 如何定义数组型的表

 array = {值1,值2,值3,} --这种比较好用
array = {[] = 值1,[] = 值2,} --容易出错 ,建议最好不要用

-- # 号,作用为获取字符串的长度 。
-- 在lua中,注意是用在数组中 ,#号为获取数组中元素的个数

 array = {'x','y','z'}
print(#array ) --获取array 数组的长度 -- #号 取得array数组的值 作为for循环的终止值
for i = ,#array , do
print(array[i])
end

2.table.insert()函数

-- 其用法如下 table.insert(数组,键,值)
-- 下面添加 键为2的值,如果原来数组中有键为2的值依次向后从新排列。
-- 如果我们省略了键,只填入数组名 和 值,就会默认把新添加的值放入数组的最后一位。

  table.insert(array,,"aa")

3. table.remove()函数

-- 从数组中删除元素 table.remove(数组名,键)
--table.remove(数组名) 默认删除最后一个元素

 bm = {"aa","bb","cc"}
table.remove(bm,)
print(#bm) --

4.table.sort()函数

-- table.sort(数组,排序规则) 强大的排序函数

 am = {"b","a","f","c"}
arra = function()
for i =,#am do
print(i..","..am[i])
end
end
table.sort(am)
arra()

5.创建自己函数的表来作为自己的函数库

 myfunc = {} --创建一个空表
myfunc.func = function()
print("数学学起来很难")
end
myfunc.func2 = function()
print("语文学起来很容易")
end
myfunc.func()
myfunc.func2()

6.表库

--table.concat(表,分隔符,开始下标,结束下标)
--作用:返回参数中表内从开始下标到结束下标中所有数组部分,并用分隔符分开。后三个参数为可选参数

 a = {,,}
2 print(table.concat(a,",",,))

--table.insert(表,键,值) 作用:在指定表中插入一个指定的键和值。参数键可以省略,省略默认放入最后一个位置

--table.maxn(表) 作用:返回指定表中多有正数键值中最大键。如果不存在键为正数的键,则返回0
--table.remove(表,键) 作用:删除 并返回 表的数组部分指定键的元素,其后的元素会被前移。如果省略键参数,则从最后一个元素删起
--table.sort(表,comp) 作用:对给定的表进行升序排序 
--comp是一个可选的参数, 此参数是一个外部函数, 可以用来自定义sort函数的排序标准.
--此函数应满足以下条件: 接受两个参数(依次为a, b), 并返回一个布尔型的值, 当a应该排在b前面时, 返回true, 反之返回false.MemberFunc1
--table.foreachi(表,function(i,v)) 作用:会期望一个从1(数字1)开始的连续 整数 范围,遍历表中的键和值逐对进行function(i,v)操作
--table.foreach(表,function(i,v)) 作用:foreach 会对整个表进行遍历
--table.getn(表) 作用:返回表中元素的个数 
--table.setn(表,个数) 作用:设置表中元素的个数

 --按升序进行排列
tab1= {"b", "a", "g", "c"}
table.sort(tab1)
print (table.concat(tab1,","))
--按降序进行排列
tab1= {"b", "a", "g", "c"}
sortFunc = function(a,b) return b<a end
table.sort(tab1,sortFunc)
print (table.concat(tab1,",")) --table.foreachi(表,function(i,v))
t1 = {,,language = "lua",lua = "aa",}
table.foreachi(t1,print) --对t1表中的整数执行print 操作

--table.foreach(表,function(i,v))

--table.getn(表) 获取表的长度 也可以用 #表 来获取表的长度 
--注意:以上2种获得 表长的方法必须要求 该table的key必须是有序的,索引是从1开始的。
--因为下面的table的key值是无序的,所以 table.getn(),#table 无法得到该table 表的长度

 a ={a ="ac",b = "cd",D = "BD"}
print(table.getn(a)) --获得表的长度 --0
print(#a) --
--如果为无序的key值,我们用下面的方法,得到表的长度
local count =
for k,v in pairs(a) do
count = count +
end
print(count)
--获取table中的最大值的例子
function maxTable(t)
local temp = nil
for k,v in pairs(t) do
if(temp==nil) then
temp = v
end
if temp<v then
temp = v
end
end
return temp
end
tab = {[]=,[]=,[]=,[]=}
print("该表的最大值为:",maxTable(tab)) --
print("tab 长度:",#tab) --3 因为 #表 只能获取连续索引的长度 ,所以只能获得索引为1-3的,索引为26的得不到

--注意:
--当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。

7.例子

 -- 有一个数组包含10个元素,sa = {54,25,66,87,47,89,34,45,63,101}利用循环判断语句将数组内的值从大到小从新排序
-- 交换两个变量的值可以写成 a,b = b,a
-- 冒泡排序法 (升序排序)从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在最前面,值较大的元素放在后面,一轮比较完毕
--一个最大的数沉底成为数组的最后一个元素,一个较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序
--按升序进行排列
sa = {,,,,,,,,,}
i =
j =
while i<(#sa) do --i<10
while j<=((#sa)-i) do --j<=9
if sa[j]>sa[j+] then --如果想从大到小进行排序 sa[j]<sa[j+1]
sa[j],sa[j+] =sa[j+],sa[j]
end
j = j+
end
j =
i = i+
end
for k,v in pairs(sa) do
print(k.."键的值为"..v)
end
--[[1键的值为25
2键的值为34
3键的值为45
4键的值为47
5键的值为54
6键的值为63
7键的值为66
8键的值为87
9键的值为89
10键的值为101--]] --冒泡排序法的另外一种写法
function bubble_sort(arr)
local tmp =
for i = ,#arr- do
for j = ,#arr-i do
if arr[j]>arr[j+] then --从小到大排列 arr[j]<arr[j+1]
tmp = arr[j]
arr[j] = arr[j+]
arr[j+] = tmp
end
end
end
end
function main(...)
local arr = {,,,,,,,,,}
bubble_sort(arr)
for i,v in pairs (arr) do
print(i.."键的值是:"..v)
end
end
main()
--结果和上面一样

Lua表(table)的用法_个人总结的更多相关文章

  1. lua 排序table.sort()用法

    table.sort(),它要求要排序的目标table的必须是从1到n连续的,即中间不能有nil.当两个数相等的时候,比较函数一定要返回false. 探究性质,我们做个试验: 1)新建文件sortte ...

  2. Cocos2d-x 脚本语言Lua基本数据结构-表(table)

    Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...

  3. lua的table表去重

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321  我的个人博客 方法一 用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table ...

  4. lua表排序

    对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之 ...

  5. lua的table表处理 及注意事项

    lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的: 下面是大牛 云风的一片关于lua table的blog,可使得对lua ta ...

  6. lua weak table 概念解析

    lua weak table 经常看到lua表中有 weak table的用法, 例如: weak_table = setmetatable({}, {__mode="v"}) 官 ...

  7. mysql 导出表结构和表数据 mysqldump用法

    mysql 导出表结构和表数据 mysqldump用法 命令行下具体用法如下:   mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysq ...

  8. LUA表克隆方法归纳

    lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...

  9. alter table的用法

    在数据库开发过程中,除了用得最多的数据库查询外,我们有时也需要去修改数据表的定义,比如在已存在的数据表中新增列和删除列等.这篇文章就总结一下alter table语句的用法. 示例代码如下. USE ...

随机推荐

  1. BZOJ_1067_[SCOI2007]降雨量_ST表

    BZOJ_1067_[SCOI2007]降雨量_ST表 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z< ...

  2. python的partition() 方法

    描述 partition() 方法用来根据指定的分隔符将字符串进行分割. 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串. p ...

  3. asp.net mvc5 使用百度ueditor 本编辑器完整示例(下)配置上传播放视频

    通过 asp.net mvc5 使用百度ueditor 本编辑器完整示例(上)介绍,可以上传图片到服务器了,也可以上传小的视频文件,并且由百度编辑器自动加入html5<video>标签播放 ...

  4. bzoj 1556: 墓地秘密【状压dp+spfa】

    显然是状压,显然不可能把所有格子压起来 仔细观察发现只有机关周围的四个格子有用以及起点,所以我们用spfa处理出这些格子两两之间的距离(注意细节--这里写挂了好几次),然后设f[s][i]为碰完的机关 ...

  5. poj 1149 PIGS【最大流】

    建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边.然后跑最大流 #inclu ...

  6. 洛谷P4116 Qtree3(树剖+线段树)

    传送门 LCT秒天秒地 树剖比较裸的题了 用线段树记录一下区间的最左边的黑点的编号(因为同一条链上肯定是最左边的深度最小,到根节点距离最近) 然后记得树剖的时候肯定是越后面的答案越优,因为深度越浅 / ...

  7. Java知识点脑图

    做服务器开发有十几年了,其中大部分用到的都是Java服务器开发,从JDK1.4到现在的JDK1.8,从基本的Java Application到 J2EE(JBOSS,Glassfish),OSGI,到 ...

  8. 手机端实现6位短信验证码input输入框效果(样式及代码方法)

    微信移动端4位.6位.多位验证码密码输入框功能的实现代码,实现思路: 方案1: 写一个简单的input框. 评估:样式不好看,待定. 方案2: 就是用6个input框,每输入一个数字之后,切换到下一个 ...

  9. [BZOJ2056]gift? 高精度?

    Description Input 输入的第一行为一个整数t. 接下来t行,每行包含九个自然数. Output 输出t行 每行一个整数,表示\(2^a+2^b+2^c+2^d+2^e+2^f+2^g+ ...

  10. NOIP-2018

    时隔一年,再度踏入NOIp的考场,内心感慨万分 Day0 在中巴上昏睡了3h++,终于到了长沙理工大学,国际学术交流中心......不太对,好像是国际交流中心与综合实验楼连线--理工大学的另一个大门外 ...