表 table: 哈希表、有序数组
import console;
// 表 table :哈希表、有序数组、稀疏数组(了解)
/*
表( table )是 aardio 中唯一的复合数据类型。除了非复合的基础数据类型以外,aardio 中几乎所有的复合对象都是表,即使是变量的命名空间也是表。
表的本质是一个集合(collection),可以用于容纳其他的数据成员,并且表也可以嵌套的包含其他的表(table),在aardio里表几乎可以容纳一切其他对象。
如果我们把字符串、buffer、数值、函数、指针.....这些基础数据类型比喻为盘子中的菜,那么表(table)这样的复合数据类型就是装菜的盘子,如果没有
了盘子,所以就没有办法愉快的吃菜了。aardio 中的表可以包含不定个数的成员,每个成员都由一个键值对组成(键用来指定成员的名称,值用来指定成员的
值)。“键”可以是任何除 null 以外的数据类型。“值”也可以是任意数据类型,当值为 null 时表示删除该成员。table 也允许嵌套,可以在 table 元素中
包含 table 。通常把“键”放在索引操作符[]中来索引一个元素的值,这时候键又称为“下标”或“索引”。例如 tab["键"] 或 tab[1],[]则被称为下标操作符。
也可以把一个符合标识符命名规则的键名放在成员操作符.后面,例如 tab.key , tab.key2 。
用 {} 表示创建一个表,表成员写在{} 内部, 使用 aardio 允许用 , 号代替 ; 号分隔表成员,并且允许
用 : 替代 = 分隔键值对,也允许在表中用引号(双引号、单引号、反引号 )包含的字符串表示键名。因此
可以使用类 JSON 的语法定义表对象,例如:
*/
// 一、哈希表(无序表)
console.log("1----------------------------")
// 1-创建一个哈希表
var tab = {
a = 123;
str = "字符串";
"name1" = "collin";
"name2":"tom";
[123] = "不符合变量命名规则的键名应放在下标内。";
["键 名"] = "不符合变量命名规则的键名应放在下标内。";
键名 = {
test = "表也可以包含表";
}
}
//2-索引哈希表内的元素
console.log(tab[1]) // 空值
console.log(tab["name1"]) // collin
console.log(tab.name2) // tom
console.log(tab[123]) // 不符合变量命名规则的键名应放在下标内。
//3-更改哈希表内元素的值
tab["name2"] = "taylor"
console.log(tab["name2"]) // taylor
//4-给哈希表添加新的元素
tab.newele = 456
console.log(tab.newele) // 456
// 二、数组(有序表) 以下写法均正确:
console.log("2----------------------------")
// 1-创建数组
var myarr2 = {[0]:5,[1]:"abc",[2]:false}
var myarr2 = {[0]=5,[1]="abc",[2]=false}
var myarr2 = {[-1]=5,[0]=10,[1]="abc",[2]="abc",[3]=false} // 数组允许有重复值
// 可以缺省索引,此时默认索引从 1 开始!
var myarr2 = {5,10,"abc",false}
// 2-索引数组元素
console.log(myarr2[0]) // 10
console.log(myarr2[1]) // abc
// 3-修改数组元素
myarr2[0] = "haha"
console.dump(myarr2)
// 三、稀疏数组
// 略,见aardio文档
// 四、补充:使用内核库来 table 添加元素
// 1-对哈希表插入元素 table.insert(mytable,"value",keynumber) keynumber 必须为数值型
console.log("4----------------------------")
var tab2 = {
a = 123;
str = "字符串";
"name1" = "collin";
"name2":"tom";
[123] = "不符合变量命名规则的键名应放在下标内。";
["键 名"] = "不符合变量命名规则的键名应放在下标内。";
键名 = {
test = "表也可以包含表";
}
}
table.insert(tab2,"duoduo",3)
// table.insert(tab2,"ivan","name3") 不合法
console.dump(tab2)
// 2-对数组添加元素
console.log("4-2----------------------------")
var myarr3 = {5,10,"abc",false}
// 2-1 插入元素:table.insert(mytable,"value",keynumber) keynumber 必须为数值型
table.insert(myarr3,"lisa",3)
// 2-2 末尾追加:table.push(myarr,new_ele1,new_ele2...)
table.push(myarr3,"duoduo") // 在尾部追加一个元素
table.push(myarr3,"taylor","ivan") // 一次性在尾部追加两个元素
console.dump(myarr3)
// 五、遍历哈希表和数组
console.log("5----------------------------")
// 5-1 for i 遍历: #myarr2 表示表的长度
for(i=1;#myarr2;1){
// console.log(i,myarr2[i]); // 或:
console.dump(i,myarr2[i]);
}
// 5-2 for in 遍历:
console.log("5-2----------------------------")
for i in myarr2{
console.log(i); // 这样只能得到键值(索引)
}
for k,v in myarr2{
console.log(k,v); // 这样可以获取索引和元素值
}
// 5-3:哈希表中的特殊遍历
var tab3={}
tab3.a = 3
tab3.b = "sss"
tab3.c = "你好"
tab3[1] = "d"
tab3[2] = "dd"
tab3[3] = "ddd"
// 5-3-1 遍历哈希表中的所有元素
console.log("5-3----------------------------")
for k,v in tab3{
console.log(k,v)
}
// 5-3-2 遍历哈希表中的键值对: for k,v in table.eachname
console.log("5-4----------------------------")
for k,v in table.eachName(tab3){
console.log(k,v)
}
// 5-3-3 遍历哈希表中的数组元素:注意 #tab3 只是哈希表中数组的元素个数不是整个哈希表中元素的个数
console.log("5-5----------------------------")
for(i=1;#tab3;1){
console.log(tab3[i])
}
// 六、删除哈希表中的元素、 删除整个哈希表
console.log("6-1----------------------------")
var tab3={}
tab3.a = 3
tab3.b = "sss"
tab3.c = "你好"
tab3[1] = "d"
tab3[2] = "dd"
tab3[3] = "ddd"
// 6-1 删除哈希表中的元素
tab3.b = null
tab3[2] = null // 这样会导致数组不连续,for i 循环只能循环到到tab3[1]
console.dump(tab3)
console.log("6-2----------------------------")
for(i=1;#tab3;1){
console.log(tab3[i]) // d null
}
// 为了避免出现上述问题,可以使用 table.remove(mytable,index)来移除数组元素,索引会自动上提,保证数组的连续性
tab3[1] = "d"
tab3[2] = "dd"
tab3[3] = "ddd"
table.remove(tab3,2) // 2表示索引位置
console.dump(tab3)
console.log("6-3----------------------------")
for(i=1;#tab3;1){
console.log(tab3[i]) // d ddd
}
// 6-2 删除整个哈希表
console.log("6-4----------------------------")
tab3 = null
console.dump(tab3) // null
// 七、多维(二维)数组
console.log("7----------------------------")
var tab4 = {"s",3,3,4,{"a","b"}}
console.log(tab4[5][2]) // b
console.log("7-2----------------------------")
var tab4 = {"s",3,3,4,{"a","b"}}
for(i=1;#tab4;1){
if (type(tab4[i]) == "table") {
console.dump(tab4[i])
}
}
console.log("7-3----------------------------")
var tab4 = {1,3,3,4,{"a","b"}}
for k,v in tab4{
console.log(k,v);
if type(v) == "table" {
console.dump(v)
}
}
console.pause();
标签:03,console,log,--,数据类型,----------------------------,tab3,哈希,table
From: https://www.cnblogs.com/Collin-pxy/p/18462501