Lua中table的基本用法

个人体会,有错就认,立正挨打

创建
local a = {}
初始化
local a = {["1"] = 12, ["zhuojian"] = 99, [3] = "hello"}
这里有两种索引:字符串型的"1"和"zhuojian"数字型的3
table支持几乎是所有类型的下标,包括函数。
简化
local a = {["1"] = 12, zhuojian = 99, [3] = "hello"}
注意这里的["1"]不能去掉索引号,默认1为Number需要""强转
[3]也不能去掉索引号,只有字符串类型可以这样简化
数组默认索引
local a = {12, 43, 45, 90}
等价于local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90}
数组默认添加索引,且从1开始递增
点号语法糖
这是字符串为索引的快速访问方法,为左值相当于set,为右值相当于get
local a = {zhuojian = "anan"}
print(a.zhuojian)
a.zhuojian = "!change"
print(a.zhuojian)
输出
anan
!change
更强大的应用之函数下标
function test(num)
print("Hello ".. num .. "b");
end
local a = {[test] = "sb"}
print(a[test]);
local b = {test}
b[1](2)
输出
sb
Hello 2b
加点有趣的东西:
local aTable = {[2]=7,[1] = 4,["2"] = 5,["3"] = 6}
for k,v in pairs(aTable) do
print(type(k))
print(k)
print(v)
end
输出:
number
1
4
number
2
7
string
3
6
string
2
5
local aTable = {[2]=7,[1] = 4,1,2,["2"] = 5,["3"] = 6}
for k,v in pairs(aTable) do
print(type(k))
print(k)
print(v)
end
输出:
number
1
1
number
2
2
string
3
6
string
2
5
Sum up :
索引号定义的key为数字的hash会被默认添加的array的值覆盖,而所有Key为数字的值都存放在array段,冲突时候存放非索引定义的,索引为字符串的放在hash端,因为key的类型不同所有不会与array段冲突,hash段的值如果索引都是字符串类型值也相同,前定义的将会被后面定义的覆盖掉。


你可能感兴趣的:(Lua自学中)