1. 程式人生 > >Lua中table的基本用法

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段的值如果索引都是字串型別值也相同,前定義的將會被後面定義的覆蓋掉。