.NET kennt neben gleichförmigen auch ungleichförmige Datenfelder (Jagged Arrays). Bei Jagged Arrays kann jede Zeile des Datenfeldes eine unterschiedliche Anzahl an Spalten besitzen. Ein ungleichförmiges Array wird als Array eines Arrays deklariert, wie nachfolgend an C# gezeigt:
int[][] jagArray = new int[3][]; jagArray[0] = new int[4]; jagArray[1] = new int[7]; jagArray[2] = new int[5]; jagArray[3] = new int[2];
Diese Art der Definition ist nicht nur aufwendig, sondern auch nur schwer zu verarbeiten. Wer kennt praktische Beispiele für den sinnvollen Einsatz der ungleichförmigen Datenfelder? Oder sollte man generell auf diesen Datenfeldtyp verzichten?
Hm, mal überlegen. Wenn Du eine Anwendung hast, die mit einem Jahres-Kalender arbeitet, könnte es in Frage kommen, diesen so zu repräsentieren:
Day[][] calendar = new Day[12][]; calendar [0] = new Day[31]; calendar [1] = new Day[28]; calendar [2] = new Day[31]; calendar [3] = new Day[30]; //...
Das ist natürlich konstruiert. In der Praxis ist mir noch kein Anwendungsfall untergekommen, was aber nicht heißen soll, dass es keine gibt. Ich finde, hier sollte wie bei allen technischen Finessen gelten: wenn es einen echten Nutzen dafür gibt, kann man sich freuen, ansonsten sollte man das Feature eher nicht einsetzen.
Übrigens: das Beispiel wäre auch ein Anlaß, über die ebenfalls selten verwendete Array.CreateInstance-Überladung nachzudenken, mit der man eine 1-basierte Indizierung erreichen kann. Dann entsprechen die Indizes den gewohnten Ordnungszahlen der Monate und Tage.
Also zumindest mein first guess wäre bei 4-Gewinnt tatsächlich entweder ein Array von Listen - schließlich ändert sich der Belegungszustand ja mit jedem Zug - oder eine echte Matrix, wo jedes Feld entweder leer, gelb oder rot bedeutet.
Für 4 Gewinnt braucht man keine Jagged Arrays sondern da reichen Mehrdimensionale Arrays aus, da beide Dimensionen fest stehen sind.
Nochmal zur Erklärung: Jagged Arrays: int[][] -> "Die Elemente eines verzweigten Arrays können über unterschiedliche Dimensionen und Größen verfügen" Mehrdimensionale Arrays: int[4][4]
@Floyd: genau, sehe ich auch so. Mit einem jagged array müßte ich nach jedem Zug eines der sub-arrays in ein neues umkopieren, um den zusätzlichen Stein hinzufügen zu können. Nur der Korrektheit willen: es sollte int[4,4] heißen.
Als Anwendungsbeispiel könnte ich mir zum Beispiel vorstellen die Bytes eine jeder Zeile einer Textdatei so zu speichern.
int[][] bytesPerLine = new int[CountLines][];
ASCIIEncoding ascii = new ASCIIEncoding(); for(var iLine = 0; i < CountLines; i++){ bytesPerLine[iLine] = ascii.GetBytes(ListOfLines[iLine]); }
Einen Empfehlung für einen generellen Verzeicht auf diese Art von "Arrays von Arrays" (wie Jagged Arrays auch genannt werden) kann ich zwar nicht aussprechen, jedoch wäre es aus meiner Sicht in vielen Fällen sinnvoller Collections (wie zum Beispiel List<T>) zu verwenden.