1. 程式人生 > 其它 >陣列的相關理論及操作

陣列的相關理論及操作

目錄:

一、陣列定義的方法

二、資料包括的資料型別

三、獲取陣列長度

四、獲取資料列表

五、讀取某下標賦值

六、陣列遍歷

七、陣列切片

八、陣列替換

九、陣列刪除

十、陣列追加元素

十一、向函式傳參

十二、從函式返回陣列

一、陣列定義的方法

 1 (30 20 10 60 50 40)
 2  0  1  2  3  4  5
 3  
 4 方法1:
 5 陣列名= (value0 value1 value2 ...) 
 6 
 7 方法2:
 8 陣列名=([0]=value [1]=value [2]=value ...)
 9 
10 方法3:
11 列表名="value0 value1 value2 ...
" 12 陣列名=($列表名) 13 14 方法4: 15 陣列名[0]="value" 16 陣列名[1]="value" 17 陣列名[2]="value"

二、陣列包括的資料型別

數值型別

字元型別(使用" "或者’ '定義)

三、獲取陣列長度

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

四、獲取資料列表

echo ${arr_number[*]}
echo ${arr_number[@]}

五、讀取某下標賦值

arr_index2=${arr_number [2]}
echo $arr_index2

六、陣列遍歷

1 #!/bin/bash
2 
3 arr=(10 20 30 40 50)
4 for i in ${arr[@]}
5 do
6   echo $i
7 done

七、陣列切片

1 arr=(1 2 3 4 5)
2 echo ${arr[@]}       #輸出整個陣列
3 echo ${arr[@]:0:2}   #獲取${ 陣列名[@或*] :起始位置:長度}的值
4 echo ${arr1[*]:1:3}
5 echo ${arr[@]:2
:3}

八、陣列替換

1 arr=(1 2 3 4 5)
2 echo ${arr[@]/4/66}  #${陣列名[@或*]/查詢字元/替換字元}
3 echo ${arr[@]}      #並不會替換陣列原有內容
4 
5 arr=(${arr[@]/4/66})  #要實現改變原有陣列,可通過重新賦值實現
6 echo ${arr[@]}

九、陣列刪除

1 arr=(1 2 3 4 5)
2 unset arr   #刪除陣列
3 echo ${arr[*]}
4 
5 arr=(1 2 3 4 5)
6 unset arr[2]    #刪除第三個元素
7 echo ${arr[*]}

十、陣列追加元素

 1 方法1:
 2 array_name[index]=value
 3 
 4 方法二:
 5 array_name[${#array_name[@]}]=value
 6 
 7 方法三:
 8 array_name=("${array_name[@]}" value1 ... valueN)
 9 #雙引號不能省略,否則,當陣列array_ name中存在包含空格的元素時會按空格將元素拆分成多個
10 #不能將“@”替換為“*”,如果替換為“*”,不加雙引號時與“@”的表現一致, 加雙引號時,會將陣列array_ name中的所有元素作為一個 元素新增到陣列中
11 for i in "${array_name[@]}"; do echo $i; done
12 
13 方法四:
14 array_name+=(value1...valueN)
15 待新增元素必須用“()"包圍起來,並且多個元素用空格分隔

十一、向函式傳參

 1 如果將陣列變數作為函式引數,函式貝會取陣列變數的第一個值
 2 
 3 test1() {
 4    echo "接收到的引數列表: $@"
 5    newarrary= ($1)
 6    echo "新陣列的值為: ${newarrary[*]}"
 7 }
 8 
 9 array=(3 2 1 4 5)
10 echo "原始陣列的值為: ${array[*]}"
11 test1 $array
12 
13 解決這個問題則需要將陣列變數的值分解成單個的值,然後將這些值作為函式引數使用。在函式內部,再將所有的引數重新組合成一個新
14 的陣列變數
15 
16 test2() {
17    newarrary=($(echo $@))
18    echo "新陣列的值為: $ {newarrary[*]}"
19 }
20 
21 array=(3 2 1 4 5)
22 echo "原始陣列的值為: ${array[*]}"
23 test2 ${array[*]}

十二、從函式返回陣列

 1 test2() {
 2 newarrary=(`echo $@ `)
 3 sum=0
 4 
 5 for value in ${newarrary[*]}
 6 do
 7     sum=$ [$sum + $value]
 8 done
 9 echo $ sum
10 }
11 
12 test3 (){
13 newarrary=(`echo $@`)
14 for ((i=0; i<=$[$# - 1] ; i++))
15 newarrary[$i]=$[${newarrary[$i]} * 2]
16 echo $ {newarrary[*] }
17 }
18 
19 array=(3 2 1 4 5)
20 echo "原始陣列的值為: ${array[*]}"
21 
22 result1='test2 ${array[*]}‘
23 echo "新陣列的和為: $result1"
24 
25 result2=(`itest3 ${array[*]}`)
26 echo "新陣列的值為: ${result2[*]}"