Lua极简入门——类型(三)table
2019-10-20 本文已影响0人
李小磊_0867
table实现了关联数组,是一种具有特殊索引方式的数组。其具体特点以及使用特性如下。
- 可以使用整数索引值进行索引,也可以使用其他字符串或其他类型索引。索引值不能是nil
a = {}
a[1] = 12
a[2] = "hello"
a["name"] = "lua"
-
table没有固定大小,可以往table中添加任意数量的元素
-
table是Lua主要的数据结构机制
-
table是对象,不需要声明,直接使用
{}
表示即可。在使用之前,必须声明才能使用
a = {}
a[1] = 12
a[2] = "hello"
b = {1,2,3}
b[4] = 4
- table是匿名,指向table的变量与table本身没有固定的关联关系
a = {}
a[1] = 12
a[2] = "hello"
b = a
for i, v in pairs(b) do
print(v)
end
-->> 12
-->> hello
for i, v in pairs(a) do
print(v)
end
-->> 12
-->> hello
a = {"lua"} -- 重新定义table,变量a指向新table,老的table并不受到影响
for i, v in pairs(b) do
print(v)
end
-->> 12
-->> hello
for i, v in pairs(a) do
print(v)
end
-->> lua
- Lua中table可以使用对象名称进行访问。如
a["name"]
等同于a.name
a = {}
a["x"] = 10
print(a["x"])
-->> 10
print(a.x)
-->> 10
上述的两种使用方式是等价的。但这里也会有些让人迷惑的地方,a.x
表示a["x"],而a[x]对于x为变量,可能表达的是别的字符。
a = {}
x = "name"
a[x] = "lua"
print(a.x) -- 对于a["x"]是不存在
-->> nil
print(a[x])
-->> lua
print(a.name)
-->> lua
- 对于数组,其起始下标为
1
a = {"a", "b", "c"}
print(a[1])
-->> a
print(a[2])
-->> b
print(a[3])
-->> c
虽然下标是从1
开始,但0
位置仍然可用,只是无法按照数组长度正确计算
a = {"a", "b", "c"}
a[0] = "0"
print(#a) -- 此时虽然数组中有四个元素,计算长度,仍然是从1开始
-->> 3
print(a[0])
-->> 0
-- 遍历数组
for i, v in pairs(a) do
print(i, v)
end
-->> 1 a
-->> 2 b
-->> 3 c
-->> 0 0
- 数组的长度,使用#加变量进行获取
t={}
t["x"] = "b"
print(#t)
-->> 1
- 数组如果不从1开始赋值,在使用#获取长度时,可能会出现概念模糊,所有为初始化的索引位置都是nil,Lua以nil作为数组结尾的标志,因此当索引值不连续时,Lua在获取长度时,会将第一个nil位置作为数组的长度
t = {}
t[10] = 123
print(#t)
-->> 0