首页 > 其他分享 >aardio入门到精通03-数据类型--表 table

aardio入门到精通03-数据类型--表 table

时间:2024-10-13 16:23:22浏览次数:1  
标签:03 console log -- 数据类型 ---------------------------- tab3 哈希 table

表 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

相关文章

  • MySQL 基础架构
    MySQL基础架构:一条SQL查询语句如何执行连接器(管理连接、权限验证)查询缓存(5.7不推荐使用,8.0完全废弃)解析器(解析树)优化器(索引选择、表关联顺序、执行计划)执行器(调用存储引擎接口)执行引擎(InnoDB、MyISAM、Memory)MySQL分成Server层和存储引擎层两部分。连接器mysql-h<ip......
  • [CTSC2014] 企鹅 QQ——哈希
    [CTSC2014]企鹅QQ题目背景PenguinQQ是中国最大、最具影响力的SNS(SocialNetworkingServices)网站,以实名制为基础,为用户提供日志、群、即时通讯、相册、集市等丰富强大的互联网功能体验,满足用户对社交、资讯、娱乐、交易等多方面的需求。题目描述小Q是PenguinQQ网站的......
  • requests 模块 - post 请求
    1、post请求requests请求方法除了get请求方法外,还有其他方法,比如常用的post方法。post应用场景如下:(1)网页需要登录的情况。(2)需要给网页传输内容的情况。post用法和get用法一样,只是发送请求时需要加上data参数。2、代码示例importrequestsurl='https://fan......
  • v4l2架构
    1架构V4L2是Videoforlinux2的简称,linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,V4L2注册的字符设备节点有2种:/dev/videoX视频设备节点/dev/v4l-subdevX子设备节点V4L2一般支持3中采集方式:内存映射方式mmap,直接读取......
  • 销售团队管理过程常见问题
    一、招聘与选拔在竞争激烈的市场环境中,寻找并选拔出既有能力又符合企业文化的销售人才是企业面临的首要挑战。优秀销售人才的稀缺性加剧了这一难题,而仅凭面试难以全面评估候选人的销售潜力和坚韧精神。因此,设计一套高效、多维度的招聘流程与评估标准显得尤为关键。这包括背景调查......
  • Swift中Themeable
    在Swift中,Themeable协议通常用于创建可以根据主题变化而改变外观的对象,比如UI组件、视图控制器等。通过实现这个协议,你可以为你的应用提供主题切换的功能,使其在不同的视觉风格下仍然保持一致性。定义Themeable协议一个简单的Themeable协议可能如下所示:protocolThemea......
  • Java_运算符
    一、运算符介绍运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。二、算术运算符1.讲解介绍算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。!注意上图中最后一行的字符串相加,结果是:hsped(不会有空格)注意!%公式是:a%b=a-a/b*b......
  • Linux系统:初识
     Linux系统中的小知识点        1.文件大小不等于文件内容大小         这一点在windows系统中也一样如图所示上面的大小仅仅表示该文档内容的大小而并非该为件的大小。文件还包括时间,位置,大小等的属性文件=文件内容+文件属性 ......
  • SpringBoot基础(四):bean的多种加载方式
    SpringBoot基础系列文章SpringBoot基础(一):快速入门SpringBoot基础(二):配置文件详解SpringBoot基础(三):Logback日志SpringBoot基础(四):bean的多种加载方式目录一、xml配置文件二、注解定义bean1、使用AnnotationConfigApplicationContext对象加载2、加载本地类3、......
  • 图像文本对比模型实践——CLIP——2021
    图像文本对比模型实践——CLIP——20211.论文启发点详细内容(文+图)clip原理的极简版:用图像编码器把图像编码成向量a;用文本编码器把文本编码成向量b;计算a·b,如果a和b来自一对儿配对的图和文字,则让a·b向1靠近;如果a和b来自不配对儿的图和文字,则让a·b向......