数组

数组

一、数组的概念

1、定义数组

方法一:

数组名=(value0 value1 value2 …)

方法二:

数组名=([0]=value [1]=value [2]=value …)

方法三:

数组名[0]=“value”

数组名[1]=“value”

数组名[2]=“value”

2、数组包括的数据类型

(1)数值类型
(2)字符类型(字符串)
使用" "''定义,防止元素当中有空格,元素按空格分割

3、索引(下标)

第一个索引始终是数字 0,且添加到数组中的每个后续元素的索引以 1 为增量递增

例如数组abc=(a b c d);第一个数据a的索引就是0,第二个数据b的索引就是1,以此类推。

4、获取数组长度

arr_number=(1 2 3 4 5)
echo ${#arr_number[*]}

5、读取某个下标赋值

arr=(1 2 3 4 5)
echo ${arr[索引值]}

二、对数组进行操作

1、数组遍历

#!/bin/bash
arr5=(1 2 3 4 5)
for i in ${arr5[*]}
do
  echo $i
done

2、补充:@和@和*的区别

$@和$*的区别
两者没加""是什么区别
加上""
$* 将数组中的数据作为一个整体使用
$@ 将数组中每个参数分别作为单个的个体使用
$# 显示的是参数的数量,也可称为长度

3、数组切片

arr1=(1 2 3 4 5 6)
echo ${arr1[*]}           
echo ${arr1[@]}       #输出整个数组,此处*与@相同
echo ${arr1[@]:0:2}   #获取 ${数组名[@或*]:起始位置:长度} 的值

4、数组替换

式:${数组名[*或@]/源参数值/将要替换的参数值}
arr2=(1 2 3 4 5)
#临时替换:将数组arr1中的参数值4替换为66,但原来的数组中的参数值并不会改变
echo ${arr2[*]/3/66}     
echo ${arr2[*]}

#永久替换:可通过重新赋值实现
arr2=(${arr2[*]/3/66})   
echo ${arr2[*]}

5、数组删除

格式:unset 数组名[索引]     #删除单个unset 数组名          #删除整个数组
#删除单个参数值
arr3=(1 2 3 4 5)
echo ${arr3[*]}
unset arr3[2]
echo ${arr3[*]}

#删除数组
unset arr3
echo ${arr3[*]}

6、数组追加

方法一:单个添加,需要知道数组中有多少参数,以及没有对数组进行任何删减

arr4=(1 2 3 4 5 6 7)
echo ${arr4[*]}
arr4[7]=8          #指定索引添加参数
echo ${arr4[*]}

方法二:直接获取源数组的全部元素再加上新要添加的元素,一并重新赋予该数组,重新刷新定义索引,可以避免中间有删减的情况

arr4=(1 2 3 4 5 6 7)
echo ${arr4[*]}
arr4=("${arr4[@]}" 8 9 10)  #加上新参数重新定义数组
echo ${arr4[*]}

方法三:待添加元素必须用“()”包围起来,并且多个元素用空格分隔

arr4=(1 2 3 4 5 6 7)
echo ${arr4[*]}
arr4+=(10 11 12)   #添加参数,这种方法用的比较多
echo ${arr4[*]}

7、数组传参给函数

#!/bin/bash
test1 () {
   echo "接受到的参数列表:$@"
   newarrary=$1                 
   echo "新数组的值为:${newarrary[*]}" 
}

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]}"
test1 $array                       #将数组变量作为函数的参数,只会取数组变量的第一个值

解决这个问题则需要将数组变量的值分解成单个的值,然后将这些值作为函数参数使用。在函数内部,再将所有的参数重新组合成一个新的数组变量

test2() {
newarrary=($(echo $@))
   echo "新数组的值为:${newarrary[*]}"
}
array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]}"
test2 ${array[*]}

#!/bin/bash
qiuhe () {
  arr1=(`echo $@`)
  sum=0
  for i in ${arr1[*]}
  do
    sum=$[$sum + $i]
  done
  echo "数组内相加结果为:$sum"
}
chengfa () {
  arr2=(`echo $@`)
  for ((i=0;i<=$[$# - 1];i++))
  do
    arr2[$i]=$[${arr2[$i]} * 2]
  done
  echo "乘法运算后的数组为:${arr2[*]}"
}
arr=(3 2 1 4 5)
test2 ${arr[*]}
test3 ${arr[*]}

三、冒泡排序

每次对比,确定最后一位【所以我数组长度需要-1】
#!/bin/bash
array=(90 70 82 100 30 66) #定义数组
echo "old_array:${array[*]}" #1.代表排序前的数组

lt=${#array[*]} #数组长度
#定义比较轮数,比较轮数为数组长度-1,从1开始
for ((i=1;i<=$lt;i++))
#当下标为0时for ((i=0;i<$lt;i++))
do
   #确定比较元素的位置,比较相邻的两个元素,较大的数往后放,在比较次数谁比较轮数而减少
    for ((j=0;j<$lt-i;j++))
    do
        #定义第一个元素的值
       first=${array[$j]}
       #定义第二个元素的值
       k=$[$j+1]
       second=${array[$k]}
      #如果第一个元素比第二个元素大,就互换
      if [ $first -gt $second ];then
      #把第一个元素的值保存到临时变量中
       temp=$first
     #把第二个元素赋值给第一个元素
       array[$j]=$second
     #把临时变量赋值给第二个元素
       array[$k]=$temp
   fi
    done
done
echo "new_array:${array[*]}"

posted @   上头猪小屁  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示