Programmieren ohne mehrdim. Array

Frezl

Erfahrenes Mitglied
Hey allerseits,

ich habe eine Frage zum Vorgehen beim Programmieren, wenn in der Sprache keine mehrdimensionalen Arrays zur Verfügung stehen.

Ein Beispiel:
Ich wollte neulich mit Perl eine Tabelle (CSV) einlesen, bei der mir weder die Anzahl der Zeilen, noch die Anzahl der Spalten vorher bekannt war.

Wenn die Anzahl der Zeilen bzw. Spalten bekannt ist, ist es ja nicht so schwer, da man für jede Zeile bzw. Spalte ein eigenes Array anlegen und diese mit Pointern zu einem mehrdim. Array zusammenbauen kann.

Da mir aber beides nicht vorher bekannt war, fiel diese Möglichkeit aus.

Meine zweite Idee war, zur Laufzeit für jede Zeile ein Array zu erstellen, aber ich hab keine Lösung gefunden, den Variablen dynamisch Namen zu geben, die ich später auch wieder finde - z. B. den Wert des Schleifen-Zählers.

Meine Lösung war am Ende, dass ich einfach jede Zeile direkt bearbeitet und wieder ausgegeben habe. Das war in diesem Fall möglich, aber manchmal will man ja alle Einträge erst mal vergleichen, bevor man sie wieder ausgibt.

Daher meine Frage:
Gibt es ein übliches Vorgehen, wie man so ein Problem ohne mehrdimensionale Arrays lösen kann?

Viele Grüße,
Frezl
 
Hallo Frezl,

Perl kann seit Version 5 mit mehrdimensionalen Arrays umgehen, daher verstehe ich dein Beispiel nicht so ganz.

Ungeachtet dessen kann man ein zweidimensionales Array in ein eindimensionales „linearisieren“, indem man die Zeilen einfach nacheinander im Speicher ablegt. Aus einem 2D-Array mit N Spalten und M Zeilen wird so ein 1D-Array mit N*M Einträgen. Auf des Element in Spalte x und Zeile y kann man über den Index y*N+x zugreifen. Dieses Verfahren lässt sich auch auf höherdimensionale Arrays verallgemeinern.

Grüße,
Matthias
 

Frezl

Erfahrenes Mitglied
Hey Matthias,

vielen Dank für deine aufschlussreiche Antwort! Habe vor einigen Tagen erst mit Perl begonnen und alle Suche im Internet hat mich immer zu der Antwort geführt, dass Perl keine mehrdim. Arrays könne. Freut mich, dass es doch geht :)

Noch viel mehr Dank für deine Erklärung, wie man 2D-Arrays linearisieren kann :) Genau so eine Lösung habe ich gesucht. Es gibt ja auch noch Sprachen, die leider keine 2D-Arrays können und da werde ich es sicher noch brauchen.

Viele Grüße,
Frezl
 

Frezl

Erfahrenes Mitglied
@ Mathias: hast du Ahnung von Perl und kannst mir da was erklären? Habe versucht, die 2D-Arrays nach diesem Tutorial zu verstehen: http://perldoc.perl.org/perldsc.html#ARRAYS-OF-ARRAYS

Worin liegt der Unterschied zwischen diesen beiden Varianten?

Variante A:
Perl:
my @mehrdim = (
								[00, 01, 02, 03],
								[10, 11, 12, 13],
								[20, 21, 22, 23]
							);
						
print $mehrdim[1][2];

Variante B:
Perl:
my $mehrdim = [
								[00, 01, 02, 03],
								[10, 11, 12, 13],
								[20, 21, 22, 23]
							];
						
print $mehrdim->[1][2];

Und wie handhabe ich mit 2D-Arrays Funktionen wie push?


Viele Grüße,
Frezl