免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
AAuto編程【語法知識】table數(shù)據(jù)
【語法知識】table數(shù)據(jù)
本帖最后由 qqmmcc 于 2011-1-5 21:23 編輯

AAuto中使用table數(shù)據(jù)類型可方便的支持表驅(qū)動法編程。
table是AAuto中唯一的數(shù)據(jù)結(jié)構(gòu)類型,用來構(gòu)建有序或無序的集合(collection)。

一。結(jié)構(gòu)
1、表結(jié)構(gòu)
1.1、哈希表
無序集合又稱為字典(Dictionaries)、哈希表(hashtable),映射(Map),聯(lián)合內(nèi)存(associative memories)聯(lián)合數(shù)組(associative arrays),每個元素都是一個“鍵值對(key:value pairs )”。
“鍵”可以是字符或其他除null以外的數(shù)據(jù)類型,甚至可以在table元素中包含table,table允許嵌套。
(如:tab = {1;2;3;x=34;{y=5;6;}}

      tab[1]=1;tab[2]=2;tab[3]=3;tab["x"]=34;tab[4]["y"]=5;tab[4][1]=6
通常把“鍵”放在索引操作符“[]”中來索引一個元素的值,這時候鍵又稱為“下標”或“索引”。
例如 tab["鍵"] tab[1]

也可以把一個符合變量命名規(guī)則的鍵放在成員操作符“.”后面,
例如 tab.key  tab.key2 ;

1.2、數(shù)組
table中以從1開始有序連續(xù)的數(shù)值索引存儲的元素構(gòu)成數(shù)組。數(shù)組在內(nèi)存中的存儲是有序的。
如果table中的部份元素使用了數(shù)字鍵但是并未包含在從1開始有序連續(xù)的數(shù)值索引中、則構(gòu)成稀疏數(shù)組。
在AAuto所指的數(shù)組專指有序連續(xù)數(shù)組。

二、構(gòu)造表構(gòu)造表
{}操作符構(gòu)造新的table對象,并以分;號分隔每一個元素 (不能使用逗號代替分號)。如果成員是一個函數(shù)并以}或end結(jié)束時,可以省略分隔符。

{}操作符在表達式中只能作為賦值表達式的右值、函數(shù)參數(shù)、或被包含在另一個table構(gòu)造器中,而不允許與其他操作符結(jié)合,不允許向前結(jié)合、向后結(jié)合,僅允許被括號{}[]()包含。

創(chuàng)建一個空的table。
days = {}

創(chuàng)建一個table數(shù)組。
days = { "Sunday"; "Monday"; "Tuesday"; "Wednesday"; "Thursday"; "Friday"; "Saturday" }

//days[1] 的內(nèi)容是 "Sunday".days[2]的內(nèi)容就是"Monday"......

table元素可以使用各種數(shù)據(jù)類型的變量,甚至可以是一個表達式或者一個函數(shù),如果我們?yōu)閠able中的值賦于一個鍵名字,則在table字典中添加一個鍵值對。
point = { x=100 ; y=200 }

//point.x 的值是100;point.y 的值是200,x、y是鍵名字

可以在一個table中同時包括“數(shù)組”、“字典”。
tab = {x=100;y=200;"Sunday"; "Monday"}

//tab.x 的值是100(即tab["x"]=100;tab.y 的值是200(tab["y"]=200
tab[1]=Sunday,tab[2]=Monday,

x=100,y=200是鍵值對,即字典;“Sunday","Monday"是字符數(shù)組,必須用“”


table的鍵名并不要求符合變量命名規(guī)則,鍵可以是任何除null以外的值或字符串。
但是在{}構(gòu)造器中的鍵名必須符合變量命名規(guī)則。

在任何時候,table中不符合變量命名規(guī)則的鍵必須通過[]操作符訪問,以下是正確的寫法:
tab = { [1]=300;[2]=400;["+"]=200;[1+1]=200 }; //因為變量名不能以數(shù)字開始,更不能包含運算符。

以上的寫法等價于
tab ={};
tab[1]=300;
tab[2]=400;
tab["+"]=200;
tab[1+1]=200;

我們可以把多個變量用一對花括號包含起來以轉(zhuǎn)換為table數(shù)組,也可以通過table.unpack函數(shù)將table數(shù)組轉(zhuǎn)換為多個變量。

tab = {"a";"abc";"abcd"} ; //多個變量創(chuàng)建一個table;
a,b,c = table.unpack(tab);//通過table.unpack將數(shù)組轉(zhuǎn)為多個變量
tab ={ table.unpack(tab) }; //將所有返回值轉(zhuǎn)換為table變量

三、在函數(shù)參數(shù)中構(gòu)造表

當在函數(shù)內(nèi)部有且只有一個使用{}構(gòu)造器構(gòu)建的table參數(shù)時,并且不包含數(shù)組元素,則{}可以省略。

例如:
func( { k = 123 ;  k2=456 }  )

可以省略{}寫成如下格式:
func( k = 123 ;  k2=456 )

四、訪問table成員

在訪問table中的元素時,用元素的鍵作為下標查詢元素的值,例如:

tab = {}; //用一對花括號創(chuàng)建一個空的table
tab["x"] = 200; //下標為字符串"x",鍵名為字符串"x",值為數(shù)值200。
tab[1] = "hellor world"; //下標為數(shù)字1,鍵索引為1,值為字符串 "hellor world"

如果“鍵”是一個數(shù)字索引稱為“鍵索引”,如果鍵是一個字符串稱為“鍵名,

對于符合變量命名規(guī)范的鍵名,可以用"."成員符訪問。
例如:
tab["x"] = 200; 也可以寫為 tab.x = 200;

當我們將tab元素賦值為null會刪除這個元素。

例如: tab.x = null; //刪除tab.x

五、遍歷table

遍歷table列表中的全部元素

io.open(); //打開控制臺窗口,用來支持print函數(shù)
tab = { a="字符串"; b=123; c="字符串2"; d=23; e=56; 78; 99; 123; 0 }
for k,v in tab  {         //k為鍵,v是匹配的值,在這里鍵值對無序的隨機出現(xiàn)。        
io.print(k,v); //顯示: 鍵,值 };

遍歷table列表中的數(shù)組元素(有序出現(xiàn))


io.open(); //打開控制臺窗口,用來支持print函數(shù)
tab = { a="字符串"; b=123; c="字符串2"; d=23; e=56; 78; 99; 123; 0 }
for i=1; #tab;1 {
    io.print( i ,tab[ i ] );
}

【示例】
//打開控制臺,開始我們的演示
io.open()

//table可以包含兩種類型的成員。一是有序的數(shù)組,一是無序的鍵值對

//1、有序數(shù)組
days = { "Sunday"; "Monday"; "Tuesday"; "Wednesday"; "Thursday"; "Friday"; "Saturday" }

//1.1、用#號取數(shù)組長度
io.print("數(shù)組長度",#days)

//1.2、用索引操作符[]訪問成員
days[1] = "我是Sunday";
io.print( days[1] )

//1.3、用for循環(huán)遍歷每個數(shù)組成員
for(i=1;#days;1){
    io.print(days[ i ] )
}

//2、無序哈希表
dic = {}

//2.1、用 table.count 號取長度(包含數(shù)組)
io.print("數(shù)組長度", table.count(dic) )

//2.2、用索引操作符[]訪問成員
dic["name"] = 123;
io.print( dic["name"]  )

//2.3、可以直接用成員操作符(小圓點)訪問成員
dic.name = 456;
io.print( dic.name )

//2.3、用for in 迭代遍歷每個數(shù)組成員
for(k,v in dic ){
    io.print( k,v )
}



作者: look    時間: 2010-12-28 19:06
溫故而知新,請問:
如果table中的部份元素使用了數(shù)字鍵但是并未包含在從1開始有序連續(xù)的數(shù)值索引中、則構(gòu)成稀疏數(shù)組。
能舉個例子嗎?
作者: look    時間: 2010-12-28 19:22
發(fā)現(xiàn)一處錯誤!
/1.3、用for循環(huán)遍歷每個數(shù)組成員
for (i=1;#days;1){
    io.print( days )
}
作者: ultra95    時間: 2010-12-31 22:57
本帖最后由 ultra95 于 2010-12-31 23:04 編輯

請問多維動態(tài)數(shù)組如何創(chuàng)建
tab={{{}}}
i,j,k
tab[j][k]=“cccc”

i,j,k只能等于1,其它數(shù)字則不行
作者: fantasynew    時間: 2010-12-31 23:39
感謝q版的辛勤工作
作者: ultra95    時間: 2011-1-1 10:56
array = table.new( 10, {} )

這個只能在開始創(chuàng)建吧,我的意思是根據(jù)計算的需要動態(tài)擴展大小 ,而且表中原來的數(shù)據(jù)不能破壞
作者: admin    時間: 2011-1-1 11:35
ultra95 發(fā)表于 2011-1-1 10:56

array = table.new( 10, {} )

這個只能在開始創(chuàng)建吧,我的意思是根據(jù)計算的需要動態(tài)擴展大小 ,而且表中 ...

AAuto的數(shù)組本就是動態(tài)的。

例如你寫
tab = {“我是數(shù)組成員”}
這時候 tab[1] 是一個字符串,tab[2]是一個null空值,那么你寫tab[1][2] 或者 tab[2][2] 都是沒有道理的了。
因為table的成員可以是任何對象,當然也可以是table,你不能對不是table的成員或者空值來使用[]這個索引。

實際上你打開preload庫,看一下table.new的源碼就可以明白。
例如 tab = {}
你要寫tab[2][2] 你就先要寫 tab[2] = {} 然后你就可以寫 tab[2][2] 了。

或者:
array = table.new( 10, {} )
array[11]= { [1] = 123; [2] = 456 }
都是可以的。



作者: admin    時間: 2011-1-1 11:37
正是因為數(shù)組是動態(tài)的,所以AAuto里并沒有初始化數(shù)組大小的語句,因為沒有這個需要。
table.new這是自定義的一個函數(shù),僅僅是為了兼容其他語言的一些習慣,實際上沒有必要做這個初始化。
作者: ultra95    時間: 2011-1-1 13:23
哦, 可能有點不習慣,我再試試

謝謝管理員回復(fù),

IDE好像有點小問題,控制臺程序在運行循環(huán)的情況下,按CTRL+C中止后,再點F5運行,會出現(xiàn)錯亂 ,好像上次運行未完全退出似的
作者: admin    時間: 2011-1-1 14:23
CTRL+C 并不終止程序,只是關(guān)閉控制臺
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Lua1
Step By Step(Lua表達式和語句)(轉(zhuǎn))
指針數(shù)組與數(shù)組指針
Lua筆記
perl基本語法
Sizeof與Strlen的區(qū)別與聯(lián)系
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服