Lua表(table)的用法_個人總結


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 --結果和上面一樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM