从其他两个构建一个数组,并在某些特殊条件下显示值

时间:2019-02-25 17:06:41

标签: arrays bash indexing

这是我的数组A => [索引]值:

[0] 0
[1] 0
[2] 0
[3] 1
[4] 0
[5] 100
[6] 0

这是我的数组B => [索引]值:

[0] 0
[1] 1
[2] 12
[3] 430
[4] 0
[5] 0
[6] 0

目的是将第一个数组和第二个数组合并为第三个数组,以便显示:

  • 其中两个值都不都是0
  • 的对
  • 保持索引

因此我的数组C的行为将是这样=> [索引]值:

[1] 0 1
[2] 0 12
[3] 1 430
[5] 100 0

如何合并并打印此结果? 预先感谢。

2 个答案:

答案 0 :(得分:2)

假设数组的长度相等。

a=(0 0 0 1 0 100 0); b=(0 1 12 430 0 0 0)
c=(); for k in "${!a[@]}"; 
do if [[ "${a[k]}" -ne 0 ]] || [[ "${b[k]}" -ne 0 ]]; 
  then c[k]="${a[k]} ${b[k]}"; fi; 
done


for k in "${!c[@]}"; do echo "$k: ${c[$k]}"; done

将打印

1: 0 1
2: 0 12
3: 1 430
5: 100 0

答案 1 :(得分:0)

如果我们假设它们的长度相同-

for (( ndx=0; ndx < "${#a[@]}"; ndx++ ))
do if (( a[ndx] || b[ndx] ))
   then c[ndx]="${a[ndx]} ${b[ndx]}"
        echo "$ndx: ${c[ndx]}"
   fi
done

如果您不知道它们是否相同或更长-

for (( ndx=0;
       ndx < ( ${#a[@]} > ${#b[@]} ? ${#a[@]} : ${#b[@]}) ; 
       ndx++ ));
do if (( a[ndx] || b[ndx] ))
   then c[ndx]="${a[ndx]} ${b[ndx]}"
        echo "$ndx: ${c[ndx]}"
   fi
done

这会将数组长度与三元运算符进行比较,并选择较长的那个。