Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从另外两个数组中构建一个数组,并显示带有某些特殊条件的值_Arrays_Bash_Indexing - Fatal编程技术网

Arrays 从另外两个数组中构建一个数组,并显示带有某些特殊条件的值

Arrays 从另外两个数组中构建一个数组,并显示带有某些特殊条件的值,arrays,bash,indexing,Arrays,Bash,Indexing,这是我的数组A=>[index]值: [0] 0 [1] 0 [2] 0 [3] 1 [4] 0 [5] 100 [6] 0 [0] 0 [1] 1 [2] 12 [3] 430 [4] 0 [5] 0 [6] 0 [1] 0 1 [2] 0 12 [3] 1 430 [5] 100 0 这是我的数组B=>[index]值: [0] 0 [1] 0 [2] 0 [3] 1 [4] 0 [5] 100 [6] 0 [0] 0 [1] 1 [2] 12 [3] 430 [4] 0 [5] 0

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

[0] 0
[1] 0
[2] 0
[3] 1
[4] 0
[5] 100
[6] 0
[0] 0
[1] 1
[2] 12
[3] 430
[4] 0
[5] 0
[6] 0
[1] 0 1
[2] 0 12
[3] 1 430
[5] 100 0
这是我的数组B=>[index]值:

[0] 0
[1] 0
[2] 0
[3] 1
[4] 0
[5] 100
[6] 0
[0] 0
[1] 1
[2] 12
[3] 430
[4] 0
[5] 0
[6] 0
[1] 0 1
[2] 0 12
[3] 1 430
[5] 100 0
其目的是将第一个阵列和第二个阵列合并到第三个阵列中,以显示:

不是两个值都为0的对 保留索引值 因此,我的数组C的行为方式是=>[index]值:

[0] 0
[1] 0
[2] 0
[3] 1
[4] 0
[5] 100
[6] 0
[0] 0
[1] 1
[2] 12
[3] 430
[4] 0
[5] 0
[6] 0
[1] 0 1
[2] 0 12
[3] 1 430
[5] 100 0
如何合并并打印此结果?
提前感谢。

假设阵列长度相等

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

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

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

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

向我们展示迄今为止的结果。请重新阅读有关创建MCVE的内容。我们将帮助您解决问题,真诚地尝试解决问题;我们不会简单地为您做看起来非常像家庭作业的事情。在shell中使用数组并没有很多有趣的方法,它们并不意味着构建有意义的数据结构;它们是一种保存包含空格的参数列表的方法。无论你能找到什么非常简单的蛮力方法来实现这一点,都可能是实现这一点的方法。示例中的预期输出不符合你对所需行为的描述。你说的只有不等于0的值,并且包括像01和1000这样的对,其中一些值是零。你是说不是两个值都是0的配对?@Socowi:没错,我的英语似乎不如你的好!测试a+b不是都不等于0的值-如果a==1和b==1会怎么样?为True。应该问一下是否可能有负面消息或者分数。谢谢@PaulHodges的回复!这个解决方案也很有效。非常感谢@karakfa您的回答解决了我的问题!