Frage Sind zweidimensionale Listen in c # möglich?


Ich möchte eine mehrdimensionale Liste erstellen. Als Referenz arbeite ich an einem Playlist-Analyzer.

Ich habe eine Datei / Datei-Liste, 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 ein neues eingefügt werden multidimensional Liste; Da ich nicht weiß, wie viele Ergebnisse / Daten ich am Ende haben werde, kann ich kein mehrdimensionales Array verwenden.

Hier sind die Daten, die ich einfügen möchte:

Liste
(
    [0] => Liste
        (
            [0] => Titel ID
            [1] => Name
            [2] => Künstler
            [3] => Album
            [4] => Spielzähler
            [5] => Anzahl überspringen

        )
    [1] => Liste
        (
Und so weiter....

Echtes Beispiel:

Liste
(
    [0] => Liste
        (
            [0] => 2349
            [1] => Die Prime Time deines Lebens
            [2] => Daft Punk
            [3] => Mensch nach allem
            [4] => 3
            [5] => 2

        )
    [1] => Liste
        (

Also ja, mlist [0] [0] würde TrackID von Song 1, mlist [1] [0] von Song 2 usw. bekommen.

Aber ich habe große Probleme beim Erstellen einer mehrdimensionalen Liste. So weit bin ich gekommen

List<List<string>> matrix = new List<List<string>>();

Aber ich habe nicht wirklich viel mehr Fortschritte gemacht :(


75
2018-03-20 08:06


Ursprung


Antworten:


Nun, du sicherlich kann benutze einen List<List<string>> wo du dann schreiben würdest:

List<string> track = new List<string>();
track.Add("2349");
track.Add("The Prime Time of Your Life");
// etc
matrix.Add(track);

Aber warum sollten Sie das tun, statt Ihre eigene Klasse zu erstellen, um einen Track mit den Eigenschaften Track ID, Name, Interpret, Album, Play Count und Skip Count darzustellen? Dann habe einfach eine List<Track>.


120
2018-03-20 08:11



Wie Jon Skeet erwähnt, dass Sie es mit einem tun können List<Track> stattdessen. Die Track-Klasse würde etwa so aussehen:

public class Track {
    public int TrackID { get; set; }
    public string Name { get; set; }
    public string Artist { get; set; }
    public string Album { get; set; }
    public int PlayCount { get; set; }
    public int SkipCount { get; set; }
}

Und um eine Titelliste als ein zu erstellen List<Track> Sie tun das einfach:

var trackList = new List<Track>();

Das Hinzufügen von Tracks kann so einfach sein:

trackList.add( new Track {
    TrackID = 1234,
    Name = "I'm Gonna Be (500 Miles)",
    Artist = "The Proclaimers",
    Album = "Finest",
    PlayCount = 10,
    SkipCount = 1
});

Der Zugriff auf Tracks kann mit dem Indizierungsoperator erfolgen:

Track firstTrack = trackList[0];

Hoffe das hilft.


89
2018-03-20 08:20



Dies ist der einfachste Weg, den ich gefunden habe.

List<List<String>> matrix= new List<List<String>>(); //Creates new nested List
matrix.Add(new List<String>()); //Adds new sub List
matrix[0].Add("2349"); //Add values to the sub List at index 0
matrix[0].Add("The Prime of Your Life");
matrix[0].Add("Daft Punk");
matrix[0].Add("Human After All");
matrix[0].Add("3");
matrix[0].Add("2");

Das Abrufen von Werten ist noch einfacher

string title = matrix[0][1]; //Retrieve value at index 1 from sub List at index 0

30
2017-08-29 16:48



Eine andere Arbeit, die ich benutzt habe, war ...

List<int []> itemIDs = new List<int[]>();

itemIDs.Add( new int[2] { 101, 202 } );

Die Bibliothek, an der ich gerade arbeite, hat eine sehr formale Klassenstruktur und ich wollte keine zusätzlichen Sachen für das Privileg, zwei 'verwandte' Ints aufzeichnen zu können.

Geht davon aus, dass der Programmierer nur ein 2-Item-Array eingibt, aber da es kein gewöhnliches Item ist, denke ich, dass es funktioniert.


11
2018-06-25 03:36



Sie können auch ... auf diese Weise tun,

List<List<Object>> Parent=new  List<List<Object>>();

List<Object> Child=new List<Object>();
child.Add(2349);
child.Add("Daft Punk");
child.Add("Human");
.
.
Parent.Add(child);

Wenn Sie einen anderen Gegenstand (Kind) brauchen, Erstellen Sie eine neue Instanz von Kind,

Child=new List<Object>();
child.Add(2323);
child.Add("asds");
child.Add("jshds");
.
.
Parent.Add(child);

2
2017-10-07 02:54



Ich benutzte:

List<List<String>> List1 = new List<List<String>>
var List<int> = new List<int>();
List.add("Test");
List.add("Test2");
List1.add(List);
var List<int> = new List<int>();
List.add("Test3");
List1.add(List);

das entspricht:

List1
(
[0] => List2 // List1[0][x]
    (
        [0] => Test  // List[0][0] etc.
        [1] => Test2

    )
[1] => List2
    (
        [0] => Test3

1
2017-11-24 07:31



Hier erfahren Sie, wie Sie eine zweidimensionale Liste erstellen können

// Erzeugen von Listen in einer Schleife.             Liste> biglist = neue Liste> ();

        for(int i = 1; i <= 10; i++)
        {
            List<string> list1 = new List<string>();
            biglist.Add(list1);
        }

        // Populating the lists
        for (int i = 0; i < 10; i++)
        {
            for(int j = 0; j < 10; j++)
            {
                biglist[i].Add((i).ToString() + " " + j.ToString());
            }
        }

        textbox1.Text = biglist[5][9] + "\n";

Beachten Sie die Gefahr, auf einen nicht belegten Standort zuzugreifen.


1
2017-08-15 22:41



Sie können auch DataTable verwenden - Sie können dann die Anzahl der Spalten und deren Typen definieren und dann Zeilen hinzufügen http://www.dotnetperls.com/datatable


0
2018-02-13 11:10