import console; 
/**
table(表)

table(表)是aardio中唯一的复合数据类型,除了非复合的基础数据类型以外,aardio中几乎所有的复合对象都是表,即使是变量的命名空间也是表。表的本质是一个集合(collection),可以用于容纳其他的数据成员,并且表也可以嵌套的包含其他的表(table),在aardio里表几乎可以容纳一切其他对象。

如果我们把字符串、buffer、数值、函数、指针.....这些基础数据类型比喻为盘子中的菜,那么表这样的复合数据类型就是装菜的盘子,
如果没有了盘子,所以就没有办法愉快的吃菜了(相当于在程序代码中传输、使用数据)。


一、表的类型
表(table)包含的数据结构也被称为字典(dictionaries)、列表(list)、映射(map)、关联数组(associative arrays)、对象(object)......等等.虽然在不同的编程语言里的具体实现存在差异(例如有序或无序存储、使用或不使用哈希算法),但基本都是用来包含不定个数的键值对成员。

aardio中的表可以包含不定个数的成员,每个成员都由一个键值对组成(键用来指定成员的名称,值用来指定成员的值)。“键”可以任何除null以外的数据类型,甚至可以在table元素中包含table,table允许嵌套。“值”也可以任意数据类型,当值为null时表示删除该成员。

通常把“键”放在索引操作符“[]”中来索引一个元素的值,这时候键又称为“下标”或“索引”。例如 tab["键"] tab[1],“[]”则被称为下标操作符。也可以把一个符合变量命名规则的键放在成员操作符“.”后面,例如 tab.key tab.key2 ;

根据键的存取排序规则,表包含的成员分为以下两种类型( 表可以同时包含以下两种类型的成员 )


**/

// 创建一个空表
var table_1 = {}; 

console.dump(table.unpack(table_1));


/**
a)、哈希表(无序集合)
aardio中的表是哈希表( hash table ),哈希表使用哈希算法存取,不会按其他特定顺序排序(在代码中添加成员的顺序将被忽略),所以在遍历哈希表时的顺序并不一定会保持代码中书写、添加表成员的顺序,因为我们把这种集合称为无序集合。
哈希表的优势是查找速度非常快,即使表包含的成员非常多,仍然可以快速的访问成员键值对。
**/
tab1 ={
	name = "张三",
	age = 20 ,
	[123] = "测试测试",
	course = {
		"语文": 100,
		"数学":90,
		"英语":95
	}
};
// 输出访问table成员
console.dump(tab1.name,tab1.age,tab1[123],tab1.course.语文,tab1.course.数学,tab1.course.英语);


console.log('---------------------')
/*
b)、数组(有序集合)
如果表中不定个数的成员的“键”是从1开始、有序、连续的数值,那么这些成员构成一个有序数组。 
在创建数组时,数组的键可以省略不写。
表总是可以同时包含数组、以及非数组成员, 即使不包含数组成员,我们也可以将表作为空数组处理。

有序数组可以使用 for 循环(或者table.eachIndex)有序的遍历成员,下面我们看一个在aardio中使用数组的简单演示
*/

for(k,v in tab1){ 
   console.log(k,v)  
}
console.log('---------------------')

var tab2 = {
	[1] = 0,
	[2] = 2,
	[3] = 10
}
for(i=1;#tab2;1){
	console.log(tab2[i])
}
console.log('---------------------')

for(k,v in table.eachIndex(tab2)){
	console.log(k,v) 
}

for(k,v in  tab2 ){
	console.log(k,v) 
}
console.log('---------------------')

/*
稀疏数组不应当作为有序数组使用,也不应当使用 # 操作符去获取数组长度。

稀疏数组可以用 table.range() 获取最小索引、最大索引。
也可以使用 table.eachArgs() 遍历稀疏数组。
*/

var sparseArray = { "值:1", null, "值:2", "值:4" }

//获取稀疏数组长度
var min,max = table.range(sparseArray);
console.log(min,max);

//遍历稀疏数组(可用于遍历函数的不定参数)
for i,v in table.eachArgs(sparseArray) {
    console.log(i,v) 
}
console.more(1);
 //无序的哈希表
var tab = {
    c = "3";
    b = "2";
    a = "1";
}

//有序的数组
var keys = {
    "c","b","a"
}

//用数组排序
for(i,k in keys){
    //用表查找值
    console.log(k,tab[k])
}

console.log('---------------------')
console.more(1);

//用数组排序
table.sort(keys); 


//用数组排序
for(i,k in keys){
    //用表查找值
    console.log(k,tab[k])
}


console.pause(true);


相关回复


    暂无评论!

发表回复