Me pregunto si es posible generar una matriz 2D si no se conoce la dimensión antes de la entrada del usuario. Por ejemplo, si el usuario ingresa 2 2 en la línea de comando, ¿el Shell generará una matriz 2D basada en eso? gracias
Respuesta1
bash
Es un lenguaje interpretado y no necesita saber cuánta memoria asignar de antemano.
Por lo tanto, es posible inicializar dinámicamente una nueva matriz sin haberla declarado o expandir una matriz ya declarada para agregar más entradas, sin embargo, no es posible utilizar matrices multidimensionales.
Sin embargo, esto puede ser falso: dado que no proporcionaste una tarea exacta para realizar, proporcionaré un bash
ejemplo de script que muestra cómo completar una m x n
tabla definida por el usuario con números aleatorios (que en realidad no son aleatorios, ya que cada columna siempre tiene el mismo número en todas sus filas en cada ejecución, pero esto no es relevante para la pregunta) e imprímalo (simplificado deesteRespuesta de desbordamiento de pila):
#!/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
Respuesta2
Puede declarar una matriz 1D y leer todos los números en una matriz 1D en tiempo de ejecución. Después de conocer la dimensión, podría procesar la matriz 1D "como una matriz 2D".
Por ejemplo, supongamos que una matriz 1D contiene
[1, 5, 9, 11]
si realmente queremos
[[1,5], [9,11]]
Como nuestra matriz es tal que el índice 0 es [1,5], entonces podrías hacer algo como esto para acceder a [1,5] (pos = 0)
pseudocódigo
for i in 0:(pos*dim + dim-1)
echo arr[i]
para acceder a [9,11] (pos = 1)
for i in pos*dim:(pos*dim + dim - 1)
echo arr[i]
Esperemos que esto tenga algún sentido. En realidad, una matriz 2D es una especie de matriz 1D.