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


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

    1.表的创建及表的介绍

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

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

    1 mm = {}
    2 mm.myfc = function ()
    3 print("数学不好学呀!")
    4 end
    5 print(mm.myfc())

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

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

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

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

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

    2.table.insert()函数

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

    1  table.insert(array,2"aa"

    3. table.remove()函数

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

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

    4.table.sort()函数

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

    1 am = {"b","a","f","c"}
    2 arra = function()
    3 for i =1,#am do 
    4 print(i..","..am[i])
    5 end
    6 end
    7 table.sort(am)
    8 arra()

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

    1 myfunc = {} --创建一个空表
    2 myfunc.func = function()
    3 print("数学学起来很难")
    4 end
    5 myfunc.func2 = function()
    6 print("语文学起来很容易")
    7 end
    8 myfunc.func()
    9 myfunc.func2()

    6.表库

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

    1 a = {55,66,88}
    2 print(table.concat(a,",",2,3))

    --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(表,个数) 作用:设置表中元素的个数

     1 --按升序进行排列
     2 tab1= {"b", "a", "g", "c"}
     3 table.sort(tab1)
     4 print (table.concat(tab1,","))
     5 --按降序进行排列
     6 tab1= {"b", "a", "g", "c"}
     7 sortFunc = function(a,b) return b<a end
     8 table.sort(tab1,sortFunc)
     9 print (table.concat(tab1,","))
    10 
    11 --table.foreachi(表,function(i,v)) 
    12 t1 = {2,4,language = "lua",lua = "aa",10}
    13 table.foreachi(t1,print) --对t1表中的整数执行print 操作

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

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

     1 a ={a ="ac",b = "cd",D = "BD"}
     2 print(table.getn(a)) --获得表的长度 --0
     3 print(#a) --0
     4 --如果为无序的key值,我们用下面的方法,得到表的长度
     5 local count = 0
     6 for k,v in pairs(a) do 
     7 count = count + 1
     8 end
     9 print(count)
    10 --获取table中的最大值的例子
    11 function maxTable(t)
    12 local temp = nil
    13 for k,v in pairs(t) do 
    14 if(temp==nil) then
    15 temp = v
    16 end
    17 if temp<v then
    18 temp = v 
    19 end
    20 end
    21 return temp
    22 end
    23 tab = {[1]=55,[2]=66,[3]=25,[26]=100}
    24 print("该表的最大值为:",maxTable(tab)) --100
    25 print("tab 长度:",#tab) --3 因为 #表 只能获取连续索引的长度 ,所以只能获得索引为1-3的,索引为26的得不到

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

    7.例子

     1 -- 有一个数组包含10个元素,sa = {54,25,66,87,47,89,34,45,63,101}利用循环判断语句将数组内的值从大到小从新排序
     2 -- 交换两个变量的值可以写成 a,b = b,a 
     3 -- 冒泡排序法 (升序排序)从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在最前面,值较大的元素放在后面,一轮比较完毕
     4 --一个最大的数沉底成为数组的最后一个元素,一个较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序
     5 --按升序进行排列
     6 sa = {54,25,66,87,47,89,34,45,63,101}
     7 i = 1
     8 j = 1
     9 while i<(#sa) do --i<10
    10 while j<=((#sa)-i) do --j<=9
    11 if sa[j]>sa[j+1] then --如果想从大到小进行排序 sa[j]<sa[j+1]
    12 sa[j],sa[j+1] =sa[j+1],sa[j]
    13 end
    14 j = j+1
    15 end
    16 j = 1
    17 i = i+1
    18 end
    19 for k,v in pairs(sa) do 
    20 print(k.."键的值为"..v)
    21 end
    22 --[[1键的值为25
    23 2键的值为34
    24 3键的值为45
    25 4键的值为47
    26 5键的值为54
    27 6键的值为63
    28 7键的值为66
    29 8键的值为87
    30 9键的值为89
    31 10键的值为101--]]
    32 
    33 --冒泡排序法的另外一种写法
    34 function bubble_sort(arr)
    35 local tmp = 0
    36 for i = 1,#arr-1 do
    37 for j = 1,#arr-i do
    38 if arr[j]>arr[j+1] then --从小到大排列 arr[j]<arr[j+1]
    39 tmp = arr[j]
    40 arr[j] = arr[j+1]
    41 arr[j+1] = tmp
    42 end
    43 end
    44 end
    45 end
    46 function main(...)
    47 local arr = {54,25,66,45,555,666,321,88,665,89}
    48 bubble_sort(arr)
    49 for i,v in pairs (arr) do
    50 print(i.."键的值是:"..v)
    51 end
    52 end
    53 main()
    54 --结果和上面一样
    我们什么都没有,唯一的本钱就是青春。梦想让我与众不同,奋斗让我改变命运!
  • 相关阅读:
    简单复利计算java板
    弹出提示框的方式——java
    实验一 命令解释程序
    简单复利计算c语言实现
    操作系统
    jsp 页面和 jsp标记
    对it行业的一些看法
    又穷自动机的构造
    复利计算——结对编程2.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/mengmengxia/p/9234183.html
Copyright © 2020-2023  润新知