Die Verwendung mehrdimensionaler Arrays ist bei der Programmierung so alltäglich wie der morgendliche Sonnenaufgang. Vielen Programmierern bereitet die Array – Datenstruktur dennoch Kopfschmerzen und verzweifelte Stunden. Der Grund ist die oftmals falsche abstrakte Vorstellung der Datenstruktur und deren Aufbau.
Die große Frage, die sich stellt: Weshalb haben viele Programmierer bzw. Menschen in diesem Arbeitsfeld das Problem diese Datenstruktur zu verstehen, also abstrakt zu erfassen?
Einer der Gründe, wenn nicht sogar der Hauptgrund, ist die in der Ausbildung (oder im Studium) falsch vermittelte Darstellung mehrdimensionaler Arrays.
Beispiel:
Bei einem zweidimensionalem Array werden die meisten wohl an eine Matrix denken. So wurde es auch sehr wahrscheinlich gelehrt. Davon abgesehen, dass diese Darstellung nichts mit der Datenstruktur gemein hat (und sogar falsch ist), funktioniert sie für zwei Dimensionen sehr gut.
Aber was ist mit der dritten Dimension? Oder der Vierten? Der Fünften? Spätestens ab der vierten Dimension sollte selbst dem Lehrer klar werden, dass diese Form der Darstellung nicht zielführend, ja sogar kontraproduktiv für das Verständnis ist.
Um aufzuzeigen warum die Matrizen – Darstellung nicht funktioniert betrachten wir am Besten die “Array” – Datenstruktur als theoretisches Konstrukt genauer.
Array – Datenstruktur
Die Datenstruktur “Array” ist ein Mittel um viele, meist gleichartige Daten so zu strukturieren, dass relativ einfach auf die Inhalte zugegriffen werden kann.
Prinzipiell ist ein Array eine Kette von Feldern die ein Index und einen Container haben.
Der Index ist in den meisten Fällen eine Zahl vom Typ Integer. Er kann aber auch z.B. vom Typ String sein. Wichtig ist nur, dass der Index ein einfacher Datentyp ist. Anders verhält es sich beim Container. Dieser kann sowohl ein einfacher, als auch ein komplexer Datentyp sein. Die Definition der Array – Datenstruktur ist damit abgeschlossen.
Bevor wir mehrere Dimensionen betrachten sollten wir ein einfaches Array abstrakt erfassen können. Ein Zug ist hierbei eine passende Wahl:
Die Positionen der Waggons symbolisieren die Indizes. Die Waggons selbst stehen für die Container. Der Inhalt der Container ist nicht näher spezifiziert (einfacher oder komplexer Datentyp).
Die zweite Dimension
Wir wissen jetzt wie ein Array aufgebaut ist. Das Hinzufügen einer weiteren Dimension kann nach der Definition der Datenstruktur nur auf eine Weise erfolgen.
Jedes Element des Arrays enthält wiederum ein Array.
Dies ist der Knackpunkt und der Grund warum der Versuch ein mehrdimensionales Array als Matrize darzustellen scheitert. Und für das Verständnis hinderlich ist.
Vergleichen wir den Fakt, dass jedes Element des Arrays wiederum ein Array enthält mit der Matrix – Darstellung. Bildet die Darstellung diesen Fakt ab? Die Antwort ist “Nein”, da in einer Matrix die einzelnen Positionen gleichwertig sind und keine klare hierarchische Struktur haben. Die Nachbarn einer Position sind laut der Darstellung auf der gleichen Ebene. Dies steht im Widerspruch zur Definition und zum logischen Aufbau von Arrays innerhalb einer realen Programmiersprache.
Eine treffendere abstrakte Darstellung ist der Zug. Wir erinnern uns, der Zug steht für das Array, die Waggons für die Elemente und die Positionen der Waggons für die Indizes. Für ein zweidimensionales Array bedeutet dies, dass jeder Waggon wiederum einen Zug enthält.
Es ist klar zu erkennen, dass diese abstrakte Darstellung mit der Definition übereinstimmt. Diese Darstellung ist auch bei Arrays mit mehr als drei Dimensionen schlüssig, konsistent und vorstellbar.
Darstellung und reelle Programmierung
Die abstrakte Darstellung eines Arrays als Zug bildet nicht nur die theoretische Definition eines Arrays ab. Auch in der Programmierung lassen sich logische Zusammenhänge erkennen:
<?php $array = $multi2DArray; // magic 2D - Array foreach($array as $index => $container){ foreach($container as $key => $content){ echo $content; } } ?>
Dieses Code-Bespiel zeigt, wie alle Elemente eines zweidimensionalen Arrays ausgelesen werden. Es ist gut zu erkennen, dass erst der komplette Inhalt des ersten Elements ausgelesen wird. Erst danach wird das zweite Element ausgelesen. Die Äußerste for-Schleife ist dabei die erste Dimension. Die innere for-Schleife die zweite Dimension. Die Hierarchie ist somit nicht nur in der Programmierung, sondern auch in der abstrakten Darstellung treffend abgebildet.
Fazit
Die Array – Datenstruktur ist wohl die beliebteste und am häufigsten genutzte. Gerade bei mehrdimensionalen Arrays ist es wichtig den Aufbau dieser Datenstruktur verstanden zu haben. Eine Matrix als abstrakte Darstellung ist suboptimal für den Lernprozess. Andere Visualisierungen sind treffender und nachhaltiger für das Verständnis.