1. 程式人生 > 實用技巧 >Unity熱更新02-Lua基礎-09-Lua複雜資料型別02 table

Unity熱更新02-Lua基礎-09-Lua複雜資料型別02 table

print("**********複雜資料型別——表2************")
print("**********字典************")
print("**********字典的申明************")
--字典是由鍵值對構成 
a = {["name"] = "US", ["age"] = 14, ["1"] = 5}
--訪問當個變數 用中括號填鍵 來訪問
print(a["name"])
print(a["age"])
print(a["1"])
--還可以類似.成員變數的形式得到值
print(a.name)
print(a.age)
--雖然可以通過.成員變數的形式得到值 但是不能是數字
print(a["1"])
--修改
a["name"] = "TLS";
print(a["name"])
print(a.name)
--新增
a["sex"] = false
print(a["sex"])
print(a.sex)
--刪除
a["sex"] = nil
print(a["sex"])
print(a.sex)
print("**********字典的遍歷************")
--如果要模擬字典 遍歷一定用pairs
for k,v in pairs(a) do
	--可以傳多個引數 一樣可以打印出來
	print(k,v)
end

for k in pairs(a) do
	print(k)
	print(a[k])
end

for _,v in pairs(a) do
	print(_, v)
end

print("**********類和結構體************")

--Lua中是預設沒有面向物件的 需要我們自己來實現
--成員變數 成員函式。。。。
Student = { 
	--年齡
	age = 1, 
	--性別
	sex = true,
	--成長函式
	Up = function()
		--這樣寫 這個age 和表中的age沒有任何關係 它是一個全域性變數
		--print(age)

		--想要在表內部函式中 呼叫表本身的屬性或者方法
		--一定要指定是誰的 所以要使用 表名.屬性 或 表名.方法
		print(Student.age)
		print("我成長了")
	end,
	--學習函式
	Learn = function(t)
		--第二種 能夠在函式內部呼叫自己屬性或者方法的 方法
		--把自己作為一個引數傳進來 在內部 訪問
		print(t.sex)
		print("好好學習,天天向上")
	end
}

--Lua中 .和冒號的區別
Student.Learn(Student)
--冒號呼叫方法 會預設把呼叫者 作為第一個引數傳入方法中
Student:Learn()

--申明表過後 在表外去申明表有的變數和方法
Student.name = "Sir"
Student.Speak = function()
	print("說話")
end
--函式的第三種申明方式
function Student:Speak2()
	--lua中 有一個關鍵字 self 表示 預設傳入的第一個引數
	print(self.name .. "說話")
end

--C#要是使用類 例項化物件new 靜態直接點
--Lua中類的表現 更像是一個類中有很多 靜態變數和函式
print(Student.age)
print(Student.name)
Student.Up()
Student.Speak()
Student:Speak2()
Student.Speak2(Student)

print("**********表的公共操作************")
--表中 table提供的一些公共方法的講解

t1 = { {age = 1, name = "123"}, {age = 2, name = "345"} }

t2 = {name = "UnitySir", sex = true}
print("**********插入************")
--插入
print(#t1)
table.insert(t1, t2);
print(#t1)
print(t1[1])
print(t1[2])
print(t1[3])
print(t1[3].sex)
print("**********移除************")
--刪除指定元素
--remove方法 傳表進去 會移除最後一個索引的內容
table.remove(t1)
print(#t1)
print(t1[1].name)
print(t1[2].name)
print(t1[3])

--remove方法 傳兩個引數 第一個引數 是要移除內容的表
--第二個引數 是要移除內容的索引
table.remove(t1, 1)
print(t1[1].name)
print(#t1)
print("**********排序************")
t2 = {5,2,7,9,5}
--傳入要排序的表 預設 降序排列
table.sort(t2)
for _,v in pairs(t2) do
	print(v)
end
print("**********降序************")
--傳入兩個引數 第一個是用於排序的表
--第二個是 排序規則函式
table.sort(t2, function(a,b)
	if a > b then
		return true
	end
end)
for _,v in pairs(t2) do
	print(v)
end

print("**********拼接************")
tb = {"123", "456", "789", "10101"}
--連線函式 用於拼接表中元素 返回值 是一個字串
str = table.concat(tb, ",")
print(str)