在 [图形化编程]前导知识-数组(一) 中,我们学习了数组的基本概念-数组的长度和下标,在 [图形化编程]前导知识-数组(二) 中,我们学习了如何添加一个元素到数组的不同位置,今天我们来看一看数组的删除元素操作
删除元素
删除元素指的是从数组里删除掉一个元素,在 micro:bit 编程模块中,一共提供了 3种 删除元素的模块,分别是:
- 获取并移除 数组 中的最后一个值
- 获取并移除 数组 中的第一个值
- 移除 索引 位置处的值
这三个模块都会获取到被移除的值,只是被移除的值在数组中所处的位置不同,下面一一说明
获取并移除数组中的最后一个值
这个模块的意思是说从数组的尾部(关于数组的头部和尾部的概念请参考 [图形化编程]前导知识-数组(二) )取出一个值,并把它从数组中移除,我们可以想象一下抽屉柜的例子,这个模块的意思是说把抽屉柜中最后一个不为空的抽屉里的小球取出来,同时抽走抽屉,这样不会影响在这个抽屉之前的所有抽屉的编号(索引),我们来看下面的例子:
- 初始化一个数组,数组中有 4 个元素,分别是 2 3 4 5(当前数组长度为 4)
- 显示数字 3 的索引值(数字 3 的索引为 1,索引值从 0 开始,还记得吗)
- 获取并移除数组中的最后一个元素,并显示获取到的值(数组中最后一个元素是 5,所以输出为 5)
- 显示移除最后一个元素后,数字 3 的索引值(数字 3 的索引不变,还为 1)
- 显示移除最后一个元素后,数组的长度(由于移除了一个元素,当前数组长度为 3)
结果:1 5 1 3
获取并移除数组中的第一个值
这个模块的意思是说从数组的头部取出一个值,并把它从数组中移除,还是拿抽屉柜举例,这个模块的意思是说把抽屉柜中第一个抽屉里的小球取出来,同时抽走抽屉,与 获取并移除 数组 中的最后一个值 的模块不同的是,在第一个元素之后的所有元素的索引都会减一,也就是所有抽屉都向前移动了一位,我们来看下面的例子:
- 初始化一个数组,数组中有 4 个元素,分别是 2 3 4 5(当前数组长度为 4)
- 显示数字 3 的索引值(数字 3 的索引为 1)
- 获取并移除数组中的第一个元素,并显示获取到的值(数组中第一个元素是 2,所以输出为 2)
- 显示移除第一个元素后,数字 3 的索引值(数字 3 的索引减一,为 0)
- 显示移除最后一个元素后,数组的长度(由于移除了一个元素,当前数组长度为 3)
结果:1 2 0 3
移除索引位置处的值
移除索引位置处的值 模块是一个功能更为强大的模块,我们可以通过这个模块指定想要移除的元素的索引值,达到移除一个元素的目的,通过这个模块我们可以指定索引值为 最后一个元素的索引值(比如 4) 实现与 获取并移除数组中的最后一个值 模块一样的效果,或者指定索引值为 0 来实现 获取并移除数组中的第一个值 模块一样的效果,因此说它的功能更强大。来看下面的例子:
- 初始化一个数组,数组中有 4 个元素,分别是 2 3 4 5(当前数组长度为 4)
- 显示数字 3 的索引值(数字 3 的索引为 1)
- 获取并移除数组中索引值为 3 处的元素的值(即当前数组最后一个元素),并显示获取到的值(数组中最后一个元素是 5,所以输出为 5)
- 显示数字 3 的索引值(数字 3 的索引不变,还为 1)
- 显示当前数组的长度(由于移除了一个元素,长度变为 3,因此输出 3)
- 获取并移除数组中索引值为 0 处的元素的值(即当前数组第一个元素),并显示获取到的值(数组中第一个元素是 2,所以输出为 2,数组中剩下的元素索引减 1)
- 显示数字 3 的索引值(数字 3 的索引减 1,变为 0)
- 显示当前数组的长度(由于又移除了一个元素,长度变为 2,因此输出 2)
结果: 1 5 1 3 2 0 2
数组越界
由于 移除索引位置处的值 这个模块的 索引 值是由我们自己指定的,所以有可能出现我们给了一个数组中不存在的索引位置,这种情况被称为 数组越界,在我们平时编程中需要避免此类错误发生,当发生数组越界时,移除索引位置处的值 这个模块会返回一个 NaN (not a number,不是一个数字),来看下面的程序:
- 初始化一个数组,数组中有 4 个元素,分别是 2 3 4 5(当前数组长度为 4)
- 移除 索引位置 9 处的元素 (合法的索引值是 0 到 3,所以 9 是一个非法的索引值,因此发生了数组越界,返回 NaN)
结果:NaN