Lua表(table)的用法_個人總結
1.表的創建及表的介紹
--table 是lua的一種數據結構用來幫助我們創建不同的數據類型。如:數組和字典
--lua table 使用關聯型數組,你可以用任意類型的值來做數組的索引,但這個值不能是nil
--lua table 是不固定大小的,你可以根據自己需要進行擴容
array = {} --這是一個空表,初始化表
--如果想從表中刪除元素,只需要把想要刪除的元素的值賦值為nil,即可
--eg:array["name"] = nil
--如何將函數作為 表 的元素添加進去
1 mm = {} 2 mm.myfc = function () 3 print("數學不好學呀!") 4 end 5 print(mm.myfc())
-- 表其實是哈希表和數組的結合體
-- 數組的下表對應 lua表中的鍵 數組元素的值對應 是lua表中的值
-- 如何定義數組型的表
1 array = {值1,值2,值3,} --這種比較好用 2 array = {[1] = 值1,[2] = 值2,} --容易出錯 ,建議最好不要用
-- # 號,作用為獲取字符串的長度 。
-- 在lua中,注意是用在數組中 ,#號為獲取數組中元素的個數
1 array = {'x','y','z'} 2 print(#array ) --獲取array 數組的長度 3 4 -- #號 取得array數組的值 作為for循環的終止值 5 for i = 1,#array ,1 do 6 print(array[i]) 7 end
2.table.insert()函數
-- 其用法如下 table.insert(數組,鍵,值)
-- 下面添加 鍵為2的值,如果原來數組中有鍵為2的值依次向后從新排列。
-- 如果我們省略了鍵,只填入數組名 和 值,就會默認把新添加的值放入數組的最后一位。
1 table.insert(array,2,"aa")
3. table.remove()函數
-- 從數組中刪除元素 table.remove(數組名,鍵)
--table.remove(數組名) 默認刪除最后一個元素
1 bm = {"aa","bb","cc"} 2 table.remove(bm,3) 3 print(#bm) -- 2
4.table.sort()函數
-- table.sort(數組,排序規則) 強大的排序函數
1 am = {"b","a","f","c"} 2 arra = function() 3 for i =1,#am do 4 print(i..","..am[i]) 5 end 6 end 7 table.sort(am) 8 arra()
5.創建自己函數的表來作為自己的函數庫
1 myfunc = {} --創建一個空表 2 myfunc.func = function() 3 print("數學學起來很難") 4 end 5 myfunc.func2 = function() 6 print("語文學起來很容易") 7 end 8 myfunc.func() 9 myfunc.func2()
6.表庫
--table.concat(表,分隔符,開始下標,結束下標)
--作用:返回參數中表內從開始下標到結束下標中所有數組部分,並用分隔符分開。后三個參數為可選參數
1 a = {55,66,88} 2 print(table.concat(a,",",2,3))
--table.insert(表,鍵,值) 作用:在指定表中插入一個指定的鍵和值。參數鍵可以省略,省略默認放入最后一個位置
--table.maxn(表) 作用:返回指定表中多有正數鍵值中最大鍵。如果不存在鍵為正數的鍵,則返回0
--table.remove(表,鍵) 作用:刪除 並返回 表的數組部分指定鍵的元素,其后的元素會被前移。如果省略鍵參數,則從最后一個元素刪起
--table.sort(表,comp) 作用:對給定的表進行升序排序
--comp是一個可選的參數, 此參數是一個外部函數, 可以用來自定義sort函數的排序標准.
--此函數應滿足以下條件: 接受兩個參數(依次為a, b), 並返回一個布爾型的值, 當a應該排在b前面時, 返回true, 反之返回false.MemberFunc1
--table.foreachi(表,function(i,v)) 作用:會期望一個從1(數字1)開始的連續 整數 范圍,遍歷表中的鍵和值逐對進行function(i,v)操作
--table.foreach(表,function(i,v)) 作用:foreach 會對整個表進行遍歷
--table.getn(表) 作用:返回表中元素的個數
--table.setn(表,個數) 作用:設置表中元素的個數
1 --按升序進行排列 2 tab1= {"b", "a", "g", "c"} 3 table.sort(tab1) 4 print (table.concat(tab1,",")) 5 --按降序進行排列 6 tab1= {"b", "a", "g", "c"} 7 sortFunc = function(a,b) return b<a end 8 table.sort(tab1,sortFunc) 9 print (table.concat(tab1,",")) 10 11 --table.foreachi(表,function(i,v)) 12 t1 = {2,4,language = "lua",lua = "aa",10} 13 table.foreachi(t1,print) --對t1表中的整數執行print 操作
--table.foreach(表,function(i,v))
--table.getn(表) 獲取表的長度 也可以用 #表 來獲取表的長度
--注意:以上2種獲得 表長的方法必須要求 該table的key必須是有序的,索引是從1開始的。
--因為下面的table的key值是無序的,所以 table.getn(),#table 無法得到該table 表的長度
1 a ={a ="ac",b = "cd",D = "BD"} 2 print(table.getn(a)) --獲得表的長度 --0 3 print(#a) --0 4 --如果為無序的key值,我們用下面的方法,得到表的長度 5 local count = 0 6 for k,v in pairs(a) do 7 count = count + 1 8 end 9 print(count) 10 --獲取table中的最大值的例子 11 function maxTable(t) 12 local temp = nil 13 for k,v in pairs(t) do 14 if(temp==nil) then 15 temp = v 16 end 17 if temp<v then 18 temp = v 19 end 20 end 21 return temp 22 end 23 tab = {[1]=55,[2]=66,[3]=25,[26]=100} 24 print("該表的最大值為:",maxTable(tab)) --100 25 print("tab 長度:",#tab) --3 因為 #表 只能獲取連續索引的長度 ,所以只能獲得索引為1-3的,索引為26的得不到
--注意:
--當我們獲取 table 的長度的時候無論是使用 # 還是 table.getn 其都會在索引中斷的地方停止計數,而導致無法正確取得 table 的長度。
7.例子
1 -- 有一個數組包含10個元素,sa = {54,25,66,87,47,89,34,45,63,101}利用循環判斷語句將數組內的值從大到小從新排序 2 -- 交換兩個變量的值可以寫成 a,b = b,a 3 -- 冒泡排序法 (升序排序)從第一個元素開始,對數組中兩兩相鄰的元素比較,將值較小的元素放在最前面,值較大的元素放在后面,一輪比較完畢 4 --一個最大的數沉底成為數組的最后一個元素,一個較小的數如同氣泡一樣上浮一個位置。n個數,經過n-1輪比較后完成排序 5 --按升序進行排列 6 sa = {54,25,66,87,47,89,34,45,63,101} 7 i = 1 8 j = 1 9 while i<(#sa) do --i<10 10 while j<=((#sa)-i) do --j<=9 11 if sa[j]>sa[j+1] then --如果想從大到小進行排序 sa[j]<sa[j+1] 12 sa[j],sa[j+1] =sa[j+1],sa[j] 13 end 14 j = j+1 15 end 16 j = 1 17 i = i+1 18 end 19 for k,v in pairs(sa) do 20 print(k.."鍵的值為"..v) 21 end 22 --[[1鍵的值為25 23 2鍵的值為34 24 3鍵的值為45 25 4鍵的值為47 26 5鍵的值為54 27 6鍵的值為63 28 7鍵的值為66 29 8鍵的值為87 30 9鍵的值為89 31 10鍵的值為101--]] 32 33 --冒泡排序法的另外一種寫法 34 function bubble_sort(arr) 35 local tmp = 0 36 for i = 1,#arr-1 do 37 for j = 1,#arr-i do 38 if arr[j]>arr[j+1] then --從小到大排列 arr[j]<arr[j+1] 39 tmp = arr[j] 40 arr[j] = arr[j+1] 41 arr[j+1] = tmp 42 end 43 end 44 end 45 end 46 function main(...) 47 local arr = {54,25,66,45,555,666,321,88,665,89} 48 bubble_sort(arr) 49 for i,v in pairs (arr) do 50 print(i.."鍵的值是:"..v) 51 end 52 end 53 main() 54 --結果和上面一樣