表與數組

aardio中只有一種數據結構,就是表,表中省略鍵值的,即爲數組:


1.名字空間不僅是一個表,還是定義了一個語句塊,在table裏,只能用鍵和值(鍵值對),不允許使用變量和語句塊。因爲鍵值具有唯一性,不會出現重複的鍵,一個鍵也不可能指向多個不同的值。雖然namespace和table都是用{}來界定的,但是語句塊是“最小的執行指令的代碼”,一個語句由操作數(常量)、操作符(做字符串組合的++和做判斷相等的==)、標識符、關鍵字等組成。標識符包括命名常量和變量;字面常量包括字符串和數值。語句塊可以限制局部變量的作用域。



2.聲明語句:包含變量聲明和局部變量聲明,API函數聲明 。一般普通的名字空間的成員變量是不需要聲明的。而局部變量是需要聲明的。


3.在global下定義的變量,可以在此名字空間內任意語句塊下使用,如果跨語句塊,則要用global方式。詳見5


4.定義一個表tabuser,如果先用namespace定義,再用table定義,那麼這個tabuser會被覆蓋;而反過來,namespace在後的話,namespace會現做檢測,如果看到之前已定義過,則做打開操作,打開這個table,然後做附加。


5.在一個名字空間內部調用這個名字空間的屬性的時候,要用self來標識當前名字空間,且訪問外部的屬性的,要用global或者..

即,語句塊要從一個抽屜裏訪問自己抽屜的屬性,用self,訪問外部整體抽屜的屬性,用global。


例如:

namespace tabuser{
	a1 = "aa";
	a2 = "bb";
	a3 = "cc";
	
	for (i=1;3;1){
		..console.log(self["a"+i])
	}

}



6.在表中,如果不指明鍵值,會變成數組array。數組,成員的索引鍵是數值,是從1開始且是連續的數的值。則就是說,有一個隱藏的[1]、[2]....這樣的鍵值:


var list={
	"aa";
	"bb";
	"cc";
}

相當於:


var list={
	[1] = "aa";
	[2] = "bb";
	[3] = "cc";
	[999] = "cisco"
}

這時候,如果用[99]這樣的鍵值代碼來指定,則可以創建一個不連續的表。但是在這種不連續的情況下計算獲取這個表有多少個連續的成員的時候,會不準,因爲用#TAB來取的話,只會取出連續的鍵值對的個數,不連續的,會被忽略。所以如果是數組模式,不要包含不連續的值。然後用table的名字用下標的方式來取值,且,這個下表[]裏面還可以使用變量。如a[i]這樣的。


7.數組的操作:

table.range(TAB)來取出最大最小索引

#TAB 來獲取這個表有多少個連續的成員

table.count(TAB) 統計表中所有成員的個數。包括不連續的,但是效率很低,因爲要遍歷

如果只是判斷這個表是不是空的,可以用table.next。

table.next(TAB) 返回下一個成員,返回一個鍵,一個值。

var k,v = table.next(A)

var k2,v2 = table.next(a,k)…………這樣就是在不停的迭代。如果是一個空表,則什麼都不會返回。相當於在if判斷中,得到了“假”。

table.push(ARR,"值1",“值2”) 在數組的最後面追加參數。

table.pop(TAB,n)在數組的尾部彈出n個值。同時,n可以用來做賦值:

var k,v = table.pop(TAB,2) 移除幾個函數,就會得到幾個返回值。

table.insrt(ARR,“插入到n前面的值”,n) 用來在n前面插入一個值。

table.remove(ARR,n)在指定的位置移除,並返回。var a  = table.remove(ARR,2)就是把ARR這個數組的第二個值移除並返回。

 








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章