美文网首页
lua表(table)

lua表(table)

作者: 亮亮同学 | 来源:发表于2019-11-20 18:34 被阅读0次

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
    Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
    Lua table 是不固定大小的,你可以根据自己需要进行扩容。

    table(表)的构造
    构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:

    -- 初始化表
    mytable = {}
    
    -- 指定值
    mytable[1]= "Lua"
    
    -- 移除引用 ,删除表
    mytable = nil
    -- lua 垃圾回收会释放内存
    
    mytable = {
      [2] = 100 ,
      index = 200
    }
    --[2]索引为2 
    --index 变量   
    
    --这就是tbale的字典表现形式
    
    for k,v in pairs(mytable) do
      print("键:"..k)
      print("值:"..v)
    end
    
    --[[结果:
    键:2
    值:100
    键:index
    值:200
    ]]]
    
    访问表中的元素

    用.来访问 table中变量的值

    mytable = {
      [2] = 100 ,
      index = 200
    }
    print(mytable.index)
    --给表中的元素赋值
    
    mytable.index = 300
    --此时 mytable中的元素index = 300
    for k,v in pairs(mytable) do
      print(v)
    end
    

    结果:
    200
    300

    当我们为 table a 并设置元素,然后将 a 赋值给 b,则 a 与 b 都指向同一个内存。如果 a 设置为 nil ,则 b 同样能访问 table 的元素。如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。
    以下实例演示了以上的描述情况:
    代码:

    -- 简单的 table
    mytable = {}
    print("mytable 的类型是 ",type(mytable))
    
    mytable[1]= "Lua"
    mytable["wow"] = "修改前"
    print("mytable 索引为 1 的元素是 ", mytable[1])
    print("mytable 索引为 wow 的元素是 ", mytable["wow"])
    
    -- alternatetable和mytable的是指同一个 table
    alternatetable = mytable
    
    print("alternatetable 索引为 1 的元素是 ", alternatetable[1])
    print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])
    
    alternatetable["wow"] = "修改后"
    
    print("mytable 索引为 wow 的元素是 ", mytable["wow"])
    
    -- 释放变量
    alternatetable = nil
    print("alternatetable 是 ", alternatetable)
    
    -- mytable 仍然可以访问
    print("mytable 索引为 wow 的元素是 ", mytable["wow"])
    
    mytable = nil
    print("mytable 是 ", mytable)
    

    结果:
    mytable 的类型是 table
    mytable 索引为 1 的元素是 Lua
    mytable 索引为 wow 的元素是 修改前
    alternatetable 索引为 1 的元素是 Lua
    mytable 索引为 wow 的元素是 修改前
    mytable 索引为 wow 的元素是 修改后
    alternatetable 是 nil
    mytable 索引为 wow 的元素是 修改后
    mytable 是 nil

    Table 操作(内部方法)

    1,Table 连接
    我们可以使用 concat() 输出一个列表中元素连接成的字符串:
    代码:

    fruits = {"banana","orange","apple"}
    -- 返回 table 连接后的字符串
    print("连接后的字符串 ",table.concat(fruits))
    
    -- 指定连接字符 
    print("连接后的字符串 ",table.concat(fruits,"-"))
    
    -- 指定索引来连接 table
    print("连接后的字符串 ",table.concat(fruits,"···", 2,3))
    
    

    结果:
    连接后的字符串 bananaorangeapple
    连接后的字符串 banana-orange-apple
    连接后的字符串 orange···apple

    2,table删除 插入 元素

    1)insesrt()插入

    .指定位置插入

    fruits = {"banana","orange","apple"}
    
    table.insert(fruits,1,"you")
    
    print(table.concat(fruits,","))
    

    结果:
    you,banana,orange,apple

    .默认插入为表的尾部

    fruits = {"banana","orange","apple"}
    
    table.insert(fruits,"you")
    
    print(table.concat(fruits,",")) --每个元素的分隔符为,
    

    结果:
    banana,orange,apple,you

    2)remove()删除
    .默认删除尾部元素

    fruits = {"banana","orange","apple"}
    table.remove(fruits)
    print(table.concat(fruits,","))
    

    结果:
    banana,orange
    .删除指定位置元素

    fruits = {"banana","orange","apple"}
    table.remove(fruits,2)
    print(table.concat(fruits,","))
    

    结果:
    banana,apple

    Table排序函数 sort

    .默认从小到大排序

    fruits = {1,2,4,3}
    table.sort(fruits)
    print(table.concat(fruits,","))
    fruits = {"banana","orange","apple"}
    table.sort(fruits)
    print(table.concat(fruits,","))
    

    结果:
    1,2,3,4
    apple,banana,orange

    .根据模式排序
    语法:table.sort(table,function)
    按照从大到小排序
    代码:

    fruits = {2,1,4,3}
    --排序规则函数
    local function sortMAx(a,b) --a,b为表中元素
        return a > b
    end
    table.sort(fruits,sortMAx)--表,排序规则函数
    print(table.concat(fruits,","))
    

    结果:
    4,3,2,1

    相关文章

      网友评论

          本文标题:lua表(table)

          本文链接:https://www.haomeiwen.com/subject/vddiictx.html