Как получить исходный и обратный порядок массива?

запускать от имени пользователя root:sudo apt install ruby-railties

0
25.04.2021, 23:25
1 ответ
array=( 1 2 3 a b c )

for i in "${!array[@]}"; do
    j=$(( ${#array[@]} - i - 1 ))
    printf '%s\t%s\n' "${array[i]}" "${array[j]}"
done

Выход:

1       c
2       b
3       a
a       3
b       2
c       1

Короче говоря, ничто не мешает вам пройтись по массиву в любом порядке и в то же время вычислить новый индекс из текущего индекса и использовать его тоже.


В комментариях к вопросу есть предложение для следующего арифметического цикла:

for (( i = 0, j = ${#array[@]} - 1; i < ${#array[@]}; ++i, --j ))
do
    printf '%s\t%s\n' "${array[i]}" "${array[j]}"
done

При этом используется тот факт, что оператор запятая может использоваться в частях инициализации и обновления заголовка цикла для поддержки двух отдельных переменных цикла.


В зависимости от того, чего вы хотите достичь, и в зависимости от ваших фактических значений массива, вы также можете использоватьtac:

$ paste <( printf '%s\n' "${array[@]}" ) <( printf '%s\n' "${array[@]}" | tac )
1       c
2       b
3       a
a       3
b       2
c       1
4
28.04.2021, 22:51

Теги

Похожие вопросы