目录
🎀什么是数组?
🎀数组优点
🎀数组缺点
🎀定义数组
🎀数组的取值
🎀一次取出数组所有的值
🎀数组长度: 即数组元素个数
🎀数组的截取(分片)(切片)
🎀连接数组
🎀替换元素
什么是数组?
数组是一种特殊的数据结构,其中的每一项被称为一个元素,对于每个元素,都可以用索引的方式取出元素的值。使用数组的典型场景是一次性要记录很多类型相同的数据时(但不一定必须要相同)。比如,为了记录班级中所有人的数学成绩,如果不用数据来处理,那就只能定义所有人成绩的变量。shell 中的数组对元素个数没有限制,但只支持一维数组。
数组优点
高效的数据访问:数组的元素在内存中是连续存储的,因此可以通过索引快速访问和修改元素。这使得数组在需要频繁访问元素的操作中非常高效,例如遍历、查找和排序等。
内存的局部性:由于数组的元素在内存中是连续存储的,当访问一个元素时,相邻元素通常也会被缓存到CPU的缓存中。这种局部性可以提高数据的访问效率,减少缓存失效带来的性能损失。
多维数据结构:数组可以很容易地表示多维数据结构,例如矩阵或图像。这使得数组在科学计算、图像处理和机器学习等领域中得到广泛应用。
高效的算法:很多经典算法和数据结构都是基于数组实现的,例如排序算法(如快速排序和归并排序)和搜索算法(如二分搜索和深度优先搜索)。这些算法通常具有高效的时间和空间复杂度,能够处理大规模数据。
灵活的动态大小:数组的大小可以在运行时动态调整,可以根据需要增加或减少元素的个数。这使得数组适用于动态的数据管理,无需提前指定大小,可以根据实际需求进行调整。
总的来说,数组是一种高效、灵活且功能强大的数据结构,能够满足许多不同场景下的数据存储和操作需求
数组缺点
固定大小:数组在创建时需要指定固定的大小,一旦创建后,其大小无法动态改变。如果需要存储的元素数量超过了数组的初始大小,就需要重新创建一个更大的数组,并将原数组的数据复制到新数组中。这种操作可能会导致内存的重新分配和数据复制的开销,影响性能。
插入和删除元素开销大:由于数组的大小固定,当需要在数组中插入或删除元素时,需要移动其他元素来腾出或填补空间。插入和删除操作的时间复杂度通常为O(n),其中n是数组中的元素数量。在频繁执行插入和删除操作的情况下,数组可能不是最优的选择。
浪费内存空间:由于数组需要预分配一定的内存空间,当实际存储的元素数量远小于数组的大小时,会造成内存空间的浪费。这种情况在需要处理动态变化的数据时特别明显,比如在开始时不知道需要存储多少元素,或者需要频繁地添加和删除元素。
不适合非连续数据存储:数组的元素在内存中是连续存储的,这样的特性使得它对于非连续数据的存储不太适合。当需要存储稀疏数据或非线性数据结构(如树或图)时,数组的优势将不再明显,可能需要选择其他数据结构来更好地表示这些数据。
综上所述,虽然数组是一种常用的数据结构,但它也有一些局限性,特别是在动态数据管理和元素插入/删除等操作方面。在实际应用中,根据具体需求和场景,需要权衡数组的优点和缺点,选择合适的数据结构来进行数据存储和操作
定义数组
[root@localhost shell]# declare -a List
[root@localhost shell]# List[0]=Tom
[root@localhost shell]# List[1]=Jerry
[root@localhost shell]# List[2]=Dog
[root@localhost shell]# echo ${List[0]}
Tom
[root@localhost shell]# echo ${List[1]}
Jerry
[root@localhost shell]# echo ${List[2]}
Dog
[root@localhost shell]#
[root@localhost shell]# Name=("zhangsan" "li si" "wang wu")
[root@localhost shell]# echo ${Name[0]}
zhangsan
[root@localhost shell]# echo ${Name[1]}
li si
[root@localhost shell]# echo ${Name[2]}
wang wu
[root@localhost shell]# echo ${Name[-1]}
wang wu
[root@localhost shell]# echo ${Name[-2]}
li si
[root@localhost shell]# echo ${Name[-3]}
zhangsan
[root@localhost shell]#
[root@localhost shell]# name=("zhangsan","li si","wang wu")
[root@localhost shell]# echo $name
zhangsan,li si,wang wu
[root@localhost shell]# echo ${name[0]}
zhangsan,li si,wang wu
[root@localhost shell]# echo ${name[1]}
[root@localhost shell]#
[root@localhost shell]# Score=([3]=3 [5]=5 [7]=7)
[root@localhost shell]# echo ${Score[3]}
3
[root@localhost shell]# echo ${Score[5]}
5
[root@localhost shell]# echo ${Score[7]}
7
[root@localhost shell]#
数组的取值
[root@localhost shell]# echo ${Name[0]}
zhangsan
[root@localhost shell]# echo ${Name}
zhangsan
[root@localhost shell]#
[root@localhost shell]# echo ${Name[2]}
wang wu
[root@localhost shell]# echo ${Name[1]}
li si
[root@localhost shell]# echo ${Name[0]}
zhangsan
[root@localhost shell]#
一次取出数组所有的值
得到的是以空格隔开的元素
[root@localhost shell]# echo ${Name[@]}
zhangsan li si wang wu
[root@localhost shell]#
* //得到的是一整个字符串
echo ${Name[*]}
数组长度: 即数组元素个数
[root@localhost shell]# echo ${#Name[*]}
3
[root@localhost shell]# echo ${#Name[@]}
3
[root@localhost shell]#
数组的截取(分片)(切片)
[root@localhost shell]# Number=(1 2 3 4 5 6 7 8)
[root@localhost shell]# echo ${Number[*]}
1 2 3 4 5 6 7 8
[root@localhost shell]# echo ${#Number[*]}
8
[root@localhost shell]#
[root@localhost shell]# echo ${Number[@]:0:3}
1 2 3
[root@localhost shell]# echo ${Number[@]:2:4}
3 4 5 6
root@localhost shell]# Word=(hello world and welcome)
[root@localhost shell]# echo ${Word[2]:0:3}
and
[root@localhost shell]# echo ${Word[1]:0:3}
wor
[root@localhost shell]# echo ${Word[1]:0:4}
worl
[root@localhost shell]#
连接数组
[root@localhost shell]# echo ${Number[@]}
1 2 3 4 5 6 7 8
[root@localhost shell]# echo ${Word[@]}
hello world and welcome
[root@localhost shell]#
[root@localhost shell]# NewNum=(${Number[@]} ${Word[@]})
[root@localhost shell]# echo $NewNum
1
[root@localhost shell]#
[root@localhost shell]# echo ${NewNum[@]}
1 2 3 4 5 6 7 8 hello world and welcome
[root@localhost shell]#
[root@localhost shell]# New=(${Word[2]:0:5} ${Number[@]:1:3})
[root@localhost shell]# echo ${New[@]}
and 2 3 4
[root@localhost shell]#
替换元素
将数组内某个元素的值替换成其他值。如果匹配不到则没有改动
[root@localhost shell]# Name=(zhangsan lisi wangwu zhaoliu)
[root@localhost shell]# echo ${Name[@]}
[root@localhost shell]# echo ${Name[@]}
zhangsan lisi wangwu zhaoliu
//将lisi替换为lilei
[root@localhost shell]# Name=(${Name[@]/lisi/lilei})
[root@localhost shell]# echo ${Name[@]}
zhangsan lilei wangwu zhaoliu
//将zhaoliu替换为zhaosi
[root@localhost shell]# Name=(${Name[@]/zhaoliu/zhaosi})
[root@localhost shell]# echo ${Name[@]}
zhangsan lilei wangwu zhaosi
[root@losthost ~]# Name[0]=wukong
[root@losthost ~]# echo ${Name[@]}
wukong lilei wangwu zhaosi
[root@losthost shell]# unset Name[2]
[root@losthostshell]# echo ${Name[@]}
zhangsan lilei zhaosi
[root@losthost shell]# unset Name
[root@losthost shell]# echo ${Name[@]}