Генерация 2D массива в Bash с неизвестным измерением

просто интересно, можно ли сгенерировать двумерный массив, если размер неизвестен до ввода пользователя. Например, если пользователь вводит 2 2 в командной строке, оболочка сгенерирует двумерный массив на основе этого? спасибо

2
задан 10 June 2015 в 07:46

2 ответа

bash интерпретируемый язык, и он не должен знать сколько памяти выделять заранее.

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

Однако это может фальсифицироваться: так как Вы не обеспечили точную задачу выполнить, я обеспечу bash пример сценария, который показывает, как заполнить пользовательское m x n таблица со случайными числами (которые не действительно случайны, так как каждый столбец будет всегда иметь то же число на всех своих строках в каждом выполнении, но это не относится к вопросу), и распечатайте его (упрощенный от этот ответ Переполнения стека):

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done
0
ответ дан 10 June 2015 в 07:46

Вы могли объявить 1D массив и считать все числа в 1D массив во времени выполнения. После знания размера Вы могли обработать 1D массив "как 2D массив".

Например, предположите 1D, массив содержит

[1, 5, 9, 11]

Если мы действительно хотим

[[1,5], [9,11]]

как наш массив, таким образом, что индекс 0 [1,5] затем, Вы могли сделать что-то вроде этого к доступу [1,5] (на месте продажи = 0)

псевдокод

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

к доступу [9,11] (на месте продажи = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

Надо надеяться, это имеет некоторый смысл. Действительно 2D массив является видом 1D массив.

1
ответ дан 10 June 2015 в 07:46

Другие вопросы по тегам:

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