第一章:基础语法(五)
通过这章的基础介绍,希望大家能够基本上掌握百宝云的语法与使用方法,能够根据自己的需要编写出自己的云服务。这章的知识可能有点无味,但是却是百宝云的基础所在,所以大家还是好好把基础打下,这样才能更好更快的学习后面的知识。
第五节:数组
数组这个知识点还是非常重要的,日常的项目里也少不了它的存在,因此,通过这节课,希望大家能掌握数组的一些常规使用方法,以便大家在日后的项目里熟练运用。
5.1 概念
数组是一系列数据的集合,可以存储大量数据,通过数组的下标、key,可以实现对数据的快速访问。
为什么要使用数组,什么场景使用数组?
好!首先我们来分析一个需求。
小花参加一次唱歌比赛中,有5名裁判打分,得到如下成绩: 89分, 90分, 80分, 95分, 82分。那么要求是:去掉最高分与最低分,最后成绩是多少? 判断出是哪个裁判的分最高与最低?
如果我们还是按照以前的思路去写的话,代码是这样的:
功能 得到成绩()
变量 裁判1成绩 = 89
变量 裁判2成绩 = 90
变量 裁判3成绩 = 80
变量 裁判4成绩 = 95
变量 裁判5成绩 = 82
// 这样的写法去判断,代码思路比较乱,而且也不方便扩展,所以就不写了
// 想这样写的读者,可以自己去写写看.
结束
这样使用了5个变量存储5个成绩,要计算出最后成绩的话,需要5 个成绩两两比较,这样的处理比较麻烦。那么有没有方便的处理办法呢?
有!这就需要用到数组了,使用数组之后,这些处理就方便很多了,后期的扩展也方便了。
那么用数组之后的写法是怎么的呢?如下:
功能 得到成绩()
变量 裁判成绩 = 数组()
裁判成绩[0] = 89
裁判成绩[1] = 90
裁判成绩[2] = 80
裁判成绩[3] = 95
裁判成绩[4] = 82
//变量 裁判成绩 = 数组(89,90,80,95,82)
变量 最高分 = 裁判成绩[0],最高分裁判 = 0,最低分 = 裁判成绩[0],最低分裁判 = 0,总成绩 = 0
遍历(变量 i = 1; i < 5; i++)
如果(最高分 < 裁判成绩[i])
最高分 = 裁判成绩[i]
最高分裁判 = i
结束
如果(最低分 > 裁判成绩[i])
最低分 = 裁判成绩[i]
最低分裁判 = i
结束
结束
遍历(变量 i = 0; i < 5; i++)
如果(i == 最高分裁判 || i == 最低分裁判)
继续
结束
总成绩 = 总成绩 + 裁判成绩[i]
结束
发送文本消息("总成绩为:" & 总成绩)
发送文本消息("最高分裁判是:" & (最高分裁判 +1) & "号裁判")
发送文本消息("最低分裁判是:" & (最低分裁判 +1) & "号裁判")
结束
这样一写之后,代码简洁了很多,条理看起来也清楚了很多。扩展起来也简单多了,就是增加数组元素,其他的都不要改了。
5.2 数组的基本用法
数组里面是可以同时存储多种类型数据。常用的数组分下面三大类型。
5.2.1索引数组
这类的数组是最简单的数组,操作起来也很简单,这类数组的下标基本上是从0开始,到数组长度-1。如上面的例子,使用的就是索引数组。简单示例如下:
//变量 a = 数组[3]("宝马","卡宴","奥迪")//
//或者
变量 a = 数组[3]
a[0] = "宝马"
a[1] = "卡宴"
a[2] = "奥迪"
//遍历数组
遍历(变量 i=0;i<3;i++)
发送文本消息(a[i])
结束
5.2.2关联数组
这类数组的特点是:key è value。也就是一个key对应一个value。这里的key可以是任意字符串。如下列的示例:
//变量 a = 数组("key1"="宝马","key2"="卡宴","key3"="奥迪")
//或者
变量 a = 数组()
a["key1"] = "宝马"
a["key2"] = "卡宴"
a["key3"] = "奥迪"
//显示指定数组元素
发送文本消息(a["key2"])
索引数组与关系数组的区别:
| 选项 | 描述 |
索引数组 | 定义 | //索引数组变量定义有五种写法 |
元素范围 | 下标是从0开始,到数组大小-1,如果访问元素,超过下标范围,程序会报错,提示访问数组越界 | |
访问方式 | 变量 内容 = 数据[0] | |
关联数组
| 定义 | //关联数组定义有三种写法 |
元素范围 | 关联数组理论上可以无限大,且不会存在越界等错误. | |
访问方式 | 关联数组采用的是一种key->value对应的方式存在,我们在访问关联数组,采用如下方法 |
5.2.3 多维数组
百宝云里的多维数组定义与其他语言的不同,不是
变量 b = 数组[2][2] // 此写法是错误的
这样的写法在百宝云里是错误的,应该是下面这样的写法:
//索引多维数组
变量 车辆资料 = 数组[3](数组[3]("Volvo",22,18), 数组[3]("BMW",15,13), 数组[3]("Saab",5,2))
//或者
变量 车辆资料 = 数组[3]()
车辆资料[0] = 数组[3]("Volvo",22,18)
车辆资料[1] = 数组[3]("BMW",15,13)
车辆资料[2] = 数组[3]("Saab",5,2)
变量 n = 数组大小(车辆资料)
遍历(变量 i=0;i < n;i++)
变量 临时数组 = 车辆资料[i]
变量 n1 = 数组大小(临时数组)
遍历(变量 j=0;j < n1;j++)
发送文本消息(临时数组[j])
结束
结束
在日常的项目当中,我们用到二维数组就差不多了,再增加维数,那样操作起来就麻烦了。
以下我们再来学习下keyàvalue类型的多维数组。示例如下:
//关联索引数组
变量 车辆资料 = 数组()
车辆资料["张三"] = 数组("品牌" = "Volvo","里程" = 22,"车铃" = 18)
车辆资料["李四"] = 数组("品牌" = "BMW","里程" = 15,"车铃" = 13)
车辆资料["王五"] = 数组("品牌" = "Saab","里程" = 5,"车铃" = 2)
//通过遍历的方式,访问关联数组中所有的元素
变量 n = 数组大小(车辆资料)
遍历(变量 i=0;i < n;i++)
变量 临时值
数组获取元素(车辆资料,i,临时值)
变量 n1 = 数组大小(临时值)
遍历(变量 j=0;j < n1;j++)
变量 临时键1,临时值1
关联数组获取元素(临时值,j,临时值1,临时键1) //记住这里只能是关联数组,否则会获取元素失败
发送文本消息("key:"&临时键1&" "&"value:"&临时值1)
结束
结束
//也可以通过关联数组的key 直接访问对应的元素
发送文本消息("李四的车辆品牌是:" & 车辆资料["李四"]["品牌"])
百宝云还提供了一系列操作数组的命令,大家有时间的时候,都去看看这些命令,最好能把命令的示例给运行下,这样就更容易掌握各个命令的用途了。