Создайте массив из двух других и отобразите значения с некоторыми особыми условиями - PullRequest
0 голосов
/ 25 февраля 2019

Вот мое значение Array A => [index]:

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

, а вот мое значение Array B => [index]:

[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 голосов
/ 25 февраля 2019

Если мы можем предположить, что они имеют одинаковую длину -

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

Это сравнениедлины массива с троичным оператором и выбирает в зависимости от того, что длиннее.

0 голосов
/ 25 февраля 2019

при условии, что массивы равной длины.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...