美文网首页
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学习

    Lua 学习 元表 setmetatable(table,metatable): 对指定table设置元表(met...

  • Lua table(表)

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。 Lua table 使用...

  • lua表(table)

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关...

  • Lua----元表(Metatable)

    什么是元表 This metatable is an ordinary Lua table that define...

  • 学习常用链接

    //Lua Lua table详解 Lua 元表详解 云风博客 //Unity Unity知识点 栈和队列 Uni...

  • lua元表

    1、Lua 元表(Metatable) setmetatable(table,metatable): 对指定tab...

  • aardio获取main()主函数启动时的传入参数

    aardio类似lua语言,也使用表table的数据结构

  • lua实现多继承

    lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过s...

  • Lua元表

    Lua元表 在Lua中,我们可以通过key找到对应的value值,但是无法对两个table进行操作。 在Lua中为...

  • Lua实现继承

    Lua元表使用 中的__index元方法可以实现面向对象和继承关系: lua中没有类的概念,只有table,但可以...

网友评论

      本文标题:lua表(table)

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