Ich frage mich nur, ob es möglich ist, ein 2D-Array zu generieren, wenn die Dimension vor der Benutzereingabe nicht bekannt ist. Wenn der Benutzer beispielsweise 2 2 in die Befehlszeile eingibt, generiert die Shell darauf basierend ein 2D-Array? Danke
Antwort1
bash
ist eine interpretierte Sprache und muss nicht im Voraus wissen, wie viel Speicher zugewiesen werden soll.
Daher ist es möglich, ein neues Array dynamisch zu initialisieren, ohne es deklariert zu haben, oder ein bereits deklariertes Array zu erweitern, um weitere Einträge hinzuzufügen. Die Verwendung mehrdimensionaler Arrays ist jedoch nicht möglich.
Dies kann jedoch vorgetäuscht werden: Da Sie keine genaue Aufgabe angegeben haben, werde ich ein bash
Skriptbeispiel bereitstellen, das zeigt, wie eine benutzerdefinierte m x n
Tabelle mit Zufallszahlen (die nicht wirklich zufällig sind, da jede Spalte bei jedem Durchlauf in allen Zeilen immer die gleiche Zahl enthält, aber das ist für die Frage nicht relevant) gefüllt und gedruckt wird (vereinfacht vonDasStack Overflow-Antwort):
#!/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
Antwort2
Sie könnten ein 1D-Array deklarieren und alle Zahlen zur Laufzeit in ein 1D-Array einlesen. Nachdem Sie die Dimension kennen, könnten Sie das 1D-Array „wie ein 2D-Array“ verarbeiten.
Nehmen wir zum Beispiel an, dass ein 1D-Array enthält
[1, 5, 9, 11]
Wenn wir wirklich wollen
[[1,5], [9,11]]
als unser Array, sodass der Index 0 [1,5] ist, dann könnten Sie so etwas tun, um auf [1,5] zuzugreifen (pos = 0)
Pseudocode
for i in 0:(pos*dim + dim-1)
echo arr[i]
um auf [9,11] zuzugreifen (pos = 1)
for i in pos*dim:(pos*dim + dim - 1)
echo arr[i]
Hoffentlich ergibt das einen gewissen Sinn. Tatsächlich ist ein 2D-Array so etwas wie ein 1D-Array.