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表中的值
-- 如何定義數組型的表lua

1 array = {值1,值2,值3,} --這種比較好用
2 array = {[1] = 值1,[2] = 值2,} --容易出錯 ,建議最好不要用

-- # 號,做用爲獲取字符串的長度 。
-- 在lua中,注意是用在數組中 ,#號爲獲取數組中元素的個數spa

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的值依次向後重新排列。
-- 若是咱們省略了鍵,只填入數組名 和 值,就會默認把新添加的值放入數組的最後一位。code

1  table.insert(array,2"aa"

3. table.remove()函數

-- 從數組中刪除元素 table.remove(數組名,鍵)
--table.remove(數組名) 默認刪除最後一個元素blog

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(表,鍵,值) 做用:在指定表中插入一個指定的鍵和值。參數鍵能夠省略,省略默認放入最後一個位置rem

--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 --結果和上面同樣
相關文章
相關標籤/搜索