我有两个数组A和B,如何将它们组合成一个新的数组C,即它们的笛卡尔积?例如:
A
B
C
A=( 0 1 ) B=( 1 2 )
预期输出:
C=( 0:1 0:2 1:1 1:2 )
pb3s4cty1#
如果你不关心是否有重复项,也不关心是否维护索引,那么你可以使用以下语句将两个数组连接在一行中:
NEW=("${OLD1[@]}" "${OLD2[@]}")
完整示例:
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh'); UnixShell=("${Unix[@]}" "${Shell[@]}") echo ${UnixShell[@]} echo ${#UnixShell[@]}
贷方:http://www.thegeekstuff.com/2010/06/bash-array-tutorial/
unftdfkk2#
由于Bash支持稀疏数组,因此最好迭代数组,而不是使用基于大小的索引。
a=(0 1); b=(2 3) i=0 for z in ${a[@]} do for y in ${b[@]} do c[i++]="$z:$y" done done declare -p c # dump the array
输出:
declare -a c='([0]="0:2" [1]="0:3" [2]="1:2" [3]="1:3")'
bvuwiixz3#
这里有一个办法
a=(0 1) b=(1 2) for((i=0;i<${#a[@]};i++)); do for ((j=0;j<${#b[@]};j++)) do c+=(${a[i]}:${b[j]}); done done for i in ${c[@]} do echo $i done
o2gm4chl4#
下面是我在Bash中合并两个数组的过程:阵列示例:AR=(1 2 3) BR=(4 5 6)一个内衬:CR=($(echo ${AR[*]}) $(echo ${BR[*]}))
AR=(1 2 3) BR=(4 5 6)
CR=($(echo ${AR[*]}) $(echo ${BR[*]}))
wvt8vs2t5#
在bash中合并两个数组的一行语句:
combine=( `echo ${array1[@]}` `echo ${array2[@]}` )
5条答案
按热度按时间pb3s4cty1#
如果你不关心是否有重复项,也不关心是否维护索引,那么你可以使用以下语句将两个数组连接在一行中:
完整示例:
贷方:http://www.thegeekstuff.com/2010/06/bash-array-tutorial/
unftdfkk2#
由于Bash支持稀疏数组,因此最好迭代数组,而不是使用基于大小的索引。
输出:
bvuwiixz3#
这里有一个办法
o2gm4chl4#
下面是我在Bash中合并两个数组的过程:
阵列示例:
AR=(1 2 3) BR=(4 5 6)
一个内衬:
CR=($(echo ${AR[*]}) $(echo ${BR[*]}))
wvt8vs2t5#
在bash中合并两个数组的一行语句: