当前位置: 首页>编程语言>正文

获取列表中索引为偶数的元素 获取数组索引

Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。

索引数组的基本特点

Bash 提供的数组都是一维数组。
任何变量都可以用作索引数组。
通过 declare 关键字可以显式的声明一个索引数组。
数组的大小是不受限制的。
索引数组的元素的索引不必是连续的。
通过从零开始的整数引用数组元素
除非另外注明,索引数组必须使用非负的整数索引元素。

自动创建索引数组

通过赋值语句可以隐式的创建索引数组:



$ myArr[0]=apple



通过给索引为 0 的元素赋值,变量 myArr 会被初始化成一个索引数组。
当然也可以这样:



$ myArr[3]=orange



不用必须从索引 0 开始赋值。

显式声明一个索引数组

通过 declare 关键字和 -a 选项可以显式的声明索引数组:



$ declare -a myArr



然后进行初始化:



$ myArr=(apple orange pear)



也可以在声明的时候进行初始化:



$ declare -a myArr=(apple orange pear)



或者在声明后只初始化某个元素:



$ myArr[0]=grape



引用数组元素

引用数组元素稍微麻烦些,不仅要指定元素的索引位置,还需要使用 ${} 符号。请注意,索引数组的下标从 0 开始,且不能为负数(真希望所有编程语言中的数组元素都从 0 开始索引!)。



$ myArr[0]=apple
$ echo ${myArr[0]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组元素,第1张

如果不小心引用了没有赋值的元素呢?不用担心,这里没有程序崩溃的问题,只不过没有输出内容而已:

获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_赋值_02,第2张

我们还可以轻松的输出数组的全部元素:



$ declare -a myArr=(apple orange pear)
$ myArr[10]=grape
$ echo ${myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_赋值_03,第3张

第四个元素的索引是不连续的。我们可以获取到所有已经赋值元素的下标进行查看:



$ echo ${!myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组_04,第4张

变量也可以用来索引数组元素:



$ declare -a myArr=(apple orange pear)
$ i=2
$ echo ${myArr[$i]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_获取列表中索引为偶数的元素_05,第5张

对于索引数组,如果你不按规矩引用数组元素可能产生一些诡异的状况。比如,用一个字符串代替非负的整数去索引元素会发生什么?



$ declare -a myArr=(apple orange pear)
$ echo ${myArr[hello]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组元素_06,第6张

这往往不是你想要的结果。实际上,无论你写什么样的字符串,都会被当做 0 来处理。

添加数组元素

比较常见的数组操作是在数组的尾部添加新的元素(严谨点说,这应该是队列的一个特征!):



$ declare -a myArr=(apple orange pear)
$ myArr=("${myArr[@]}" grape)
$ echo ${myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_赋值_07,第7张

请注意最后一行的输出,这样添加的元素的索引是连续的。

把两个数组连接成一个也是比较常见的操作:



$ declare -a myAbc=(a b c)
$ myArr=("${myArr[@]}" "${myAbc[@]}")
$ echo ${myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组元素_08,第8张

提取子数组

提取部分数组元素:



$ declare -a myArr=(a b c d e f g)
$ echo ${myArr[@]:2:3}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组_09,第9张

数组的长度

在 Bash 中,引用数组长度的语法多少有些奇特:



$ declare -a myArr=(apple orange pear)
$ echo ${#myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_获取列表中索引为偶数的元素_10,第10张

数组长度是指被赋值了的元素个数:



$ myArr[10]=grape
$ echo ${#myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组_11,第11张

我们还可以获取到某个元素的长度:

获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组_12,第12张

哈哈,看起来有些像二维数组了!

遍历数组元素

通过 for 语句可以像其它编程语言那样遍历数组中的元素:



$ declare -a myArr=(apple orange pear)
$ myArr[10]=grape
$ for element in "${myArr[@]}"; do echo $element done



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_赋值_13,第13张

删除数组元素



$ declare -a myArr=(apple orange pear)
$ unset myArr[1]
$ echo ${myArr[1]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_赋值_14,第14张

索引为 1 的元素已经为空了,其实数组的长度也发生了变化:



$ echo ${#myArr[@]}



此时数组的长度已经变成了 2。

下面来个复杂点的:



$ declare -a myArr=(a b c d e f)
$ myArr=("${myArr[@]:0:3}" "${myArr[@]:4}")



上面的代码移除了元素 d:

获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组元素_15,第15张

清空数组



$ declare -a myArr=(apple orange pear)
$ unset myArr
$ echo ${myArr[@]}



获取列表中索引为偶数的元素 获取数组索引,获取列表中索引为偶数的元素 获取数组索引_数组_16,第16张

OK,数组里已经没有元素了!


https://www.xamrdz.com/lan/53x1963779.html

相关文章: