Ich möchte eine mehrdimensionale Liste erstellen. Als Referenz arbeite ich an einem Playlist-Analysator.
Ich habe eine Datei / Dateiliste, die mein Programm in einer Standardliste speichert. Eine Zeile aus der Datei in jedem Listeneintrag.
Ich analysiere dann die Liste mit regulären Ausdrücken, um bestimmte Zeilen zu finden. Einige der Daten / Ergebnisse aus den Zeilen müssen in eine neue mehrdimensionale Liste aufgenommen werden. Da ich nicht weiß, mit wie vielen Ergebnissen / Daten ich enden werde, kann ich kein mehrdimensionales Array verwenden.
Hier sind die Daten, die ich einfügen möchte:
Aufführen ( [0] => Liste ( [0] => Track ID [1] => Name [2] => Künstler [3] => Album [4] => Anzahl spielen [5] => Anzahl überspringen ) [1] => Liste ( Und so weiter....
Echtes Beispiel:
Aufführen ( [0] => Liste ( [0] => 2349 [1] => Die Hauptzeit deines Lebens [2] => Daft Punk [3] => Immerhin ein Mensch [4] => 3 [5] => 2 ) [1] => Liste (
Also ja, mlist [0] [0] würde TrackID von Song 1, mlist [1] [0] von Song 2 usw. erhalten.
Aber ich habe große Probleme beim Erstellen einer mehrdimensionalen Liste. Bisher habe ich mir ausgedacht
List<List<string>> matrix = new List<List<string>>();
Aber ich habe nicht wirklich viel mehr Fortschritte gemacht :(
Track
Klasse. Es wird viel einfacher sein, den Code zu verstehen / zu pflegen. Wenn Sie eine Spur als Liste von Zeichenfolgen darstellen, müssen die Unabhängigkeiten, in denen Sie ein bestimmtes Attribut speichern, über alle Instanzen hinweg synchronisiert werden, in denen Sie versuchen, auf Spurinformationen zuzugreifen. Die Implementierung wird jedes Mal mühsam und das Debuggen unmöglich. Bitte schauen Sie sich um Ihrer selbst willen den Unterricht an. :)Wie Jon Skeet bereits erwähnt hat, können Sie dies
List<Track>
stattdessen mit einem tun . Die Track-Klasse würde ungefähr so aussehen:Und um eine Titelliste zu erstellen,
List<Track>
tun Sie einfach Folgendes:Das Hinzufügen von Tracks kann so einfach sein:
Der Zugriff auf Tracks kann mit dem Indexierungsoperator erfolgen:
Hoffe das hilft.
quelle
for(i=0;i< length; i++) { for(j=0;j<length2;j++) {// what should be written here to get the values from a 2d array // to this 2d list } }
Dies ist der einfachste Weg, den ich gefunden habe, um es zu tun.
Das Abrufen von Werten ist noch einfacher
quelle
Eine andere Arbeit, die ich verwendet habe, war ...
Die Bibliothek, an der ich arbeite, hat eine sehr formale Klassenstruktur und ich wollte dort keine zusätzlichen Dinge für das Privileg, zwei "verwandte" Ints aufzunehmen.
Verlässt sich darauf, dass der Programmierer nur ein Array mit 2 Elementen eingibt, aber da es kein allgemeines Element ist, denke ich, dass es funktioniert.
quelle
Sie können auch ... auf diese Weise tun,
Wenn Sie ein anderes Element (untergeordnetes Element) benötigen, erstellen Sie eine neue Instanz von untergeordnetem Element.
quelle
Hier erfahren Sie, wie Sie eine zweidimensionale Liste erstellen
Seien Sie sich der Gefahr bewusst, auf einen Ort zuzugreifen, der nicht besiedelt ist.
quelle
Ich benutzte:
das entspricht:
quelle
Sie können auch DataTable verwenden - Sie können dann die Anzahl der Spalten und ihre Typen definieren und dann Zeilen hinzufügen http://www.dotnetperls.com/datatable
quelle
List<Track>
Ansatz und verwenden Sie aBindingSource
, indem Sie einfach eine DataSource zu IhremDataGridView
Typ hinzufügenTrack
, um stark typisierte Klassen im Code zu unterstützen und die Visualisierung der Spuren in der Datenrasteransicht einfach zu konfigurieren.Hier ist etwas, das ich vor einiger Zeit für eine Spiel-Engine gemacht habe, an der ich gearbeitet habe. Es wurde als lokaler Objektvariablenhalter verwendet. Grundsätzlich verwenden Sie es als normale Liste, aber es enthält den Wert an der Position des Zeichenfolgennamens (oder der ID). Ein bisschen Modifikation, und Sie haben Ihre 2D-Liste.
quelle