Je me demande juste s'il est possible de générer un tableau 2D si la dimension n'est pas connue avant la saisie de l'utilisateur. Par exemple, si l'utilisateur saisit 2 2 sur la ligne de commande, le Shell génèrera un tableau 2D sur cette base ?
Réponses
Trop de publicités?bash
est un langage interprété, et il n'a pas besoin de connaître à l'avance la quantité de mémoire à allouer.
Il est donc possible d'initialiser de façon dynamique un nouveau tableau sans l'avoir déclaré ou d'étendre un tableau déjà déclaré pour ajouter des entrées supplémentaires, mais il n'est pas possible d'utiliser des tableaux multidimensionnels.
Cependant, cela peut être truqué : puisque vous n'avez pas fourni une tâche exacte à accomplir, je vais fournir une bash
script qui montre comment remplir un formulaire défini par l'utilisateur. m x n
avec des nombres aléatoires (qui ne sont pas vraiment aléatoires, puisque chaque colonne aura toujours le même nombre sur toutes ses lignes à chaque passage, mais ce n'est pas pertinent pour la question) et l'imprimer (simplifié à partir de este Réponse de Stack Overflow) :
#!/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
Vous pourriez déclarer un tableau 1D et lire tous les nombres dans un tableau 1D au moment de l'exécution. Une fois la dimension connue, vous pouvez traiter le tableau 1D "comme un tableau 2D".
Par exemple, supposons que le tableau 1D contient
[1, 5, 9, 11]
Si nous voulons vraiment
[[1,5], [9,11]]
en tant que tableau de telle sorte que l'indice 0 soit [1,5], vous pourriez faire quelque chose comme ceci pour accéder à [1,5] (pos = 0)
pseudo-code
for i in 0:(pos*dim + dim-1)
echo arr[i]
pour accéder à [9,11] (pos = 1)
for i in pos*dim:(pos*dim + dim - 1)
echo arr[i]
J'espère que cela a un sens. En réalité, un tableau 2D est en quelque sorte un tableau 1D.