Les listes à 2 dimensions sont-elles possibles dans c #?

Je voudrais mettre en place une liste multidimensionnelle. Pour référence, je travaille sur un parsingur de playlist.

J’ai une liste de fichiers / fichiers que mon programme enregistre dans une liste standard. Une ligne du fichier dans chaque entrée de liste.

J’parsing ensuite la liste avec des expressions régulières pour trouver des lignes spécifiques. Certaines données / résultats des lignes doivent être placés dans une nouvelle liste multidimensionnelle ; comme je ne sais pas combien de résultats / données je vais finir, je ne peux pas utiliser un tableau multidimensionnel.

Voici les données que je veux insérer:

 liste
 (
     [0] => Liste
         (
             [0] => Identifiant de la piste
             [1] => Nom
             [2] => artiste
             [3] => Album
             [4] => Nombre de jeux
             [5] => Skip Count

         )
     [1] => Liste
         (
 Etc....

Exemple réel:

 liste
 (
     [0] => Liste
         (
             [0] => 2349
             [1] => Le prime time de votre vie
             [2] => Daft Punk
             [3] => Humain après tout
             [4] => 3
             [5] => 2

         )
     [1] => Liste
         (

Donc oui, mlist [0] [0] obtiendrait TrackID de la chanson 1, mlist [1] [0] de la chanson 2 etc.

Mais j’ai beaucoup de problèmes à créer une liste multidimensionnelle. Jusqu’à présent, j’ai trouvé

List<List> masortingx = new List<List>(); 

Mais je n’ai pas vraiment beaucoup progressé 🙁

Eh bien, vous pouvez certainement utiliser une List> où vous écrivez ensuite:

 List track = new List(); track.Add("2349"); track.Add("The Prime Time of Your Life"); // etc masortingx.Add(track); 

Mais pourquoi feriez-vous cela au lieu de créer votre propre classe pour représenter une piste, avec les propriétés Identifiant de piste, Nom, Artiste, Album, Nombre de parties jouées et Nombre de sauts? Ensuite, il suffit d’avoir une List .

Comme Jon Skeet l’a mentionné, vous pouvez le faire avec une List place. La classe Track ressemblerait à ceci:

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

Et pour créer une liste de pistes sous forme de List vous faites simplement ceci:

 var trackList = new List(); 

L’ajout de pistes peut être aussi simple que cela:

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

L’access aux pistes peut être effectué avec l’opérateur d’indexation:

 Track firstTrack = trackList[0]; 

J’espère que cela t’aides.

C’est le moyen le plus simple que j’ai trouvé pour le faire.

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

Récupérer des valeurs est encore plus facile

 ssortingng title = masortingx[0][1]; //Resortingeve value at index 1 from sub List at index 0 

un autre travail autour duquel j’ai utilisé était …

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

La bibliothèque sur laquelle je travaille a une structure de classe très formelle et je ne voulais pas append beaucoup de choses pour le privilège d’enregistrer deux ints associés.

Le programmeur ne doit entrer qu’un tableau à 2 éléments, mais comme ce n’est pas un élément courant, je pense que cela fonctionne.

Vous pouvez aussi … faire de cette façon,

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

si vous avez besoin d’un autre élément (enfant), créez une nouvelle instance de l’enfant,

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

J’ai utilisé:

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

cela équivaut à:

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

Voici comment faire une liste en 2 dimensions

// Générer des listes dans une boucle. List> biglist = new List> ();

  for(int i = 1; i <= 10; i++) { List list1 = new List(); 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"; 

Soyez conscient du danger d’accéder à un lieu qui n’est pas peuplé.

Vous pouvez également utiliser DataTable – vous pouvez ensuite définir le nombre de colonnes et leurs types, puis append des lignes http://www.dotnetperls.com/datatable

Voici un petit quelque chose que j’ai fait il y a quelque temps pour un moteur de jeu sur lequel je travaillais. Il a été utilisé comme porte-variable d’object local. Fondamentalement, vous l’utilisez comme une liste normale, mais elle contient la valeur à la position du nom de la chaîne (ou de l’ID). Un peu de modification, et vous aurez votre liste 2D.

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GameEngineInterpreter { public class VariableList { private List list1; private List list2; ///  /// Initialize a new Variable List ///  public VariableList() { list1 = new List(); list2 = new List(); } ///  /// Set the value of a variable. If the variable does not exist, then it is created ///  /// Name or ID of the variable /// The value of the variable public void Set(ssortingng variable, T value) { if (!list1.Contains(variable)) { list1.Add(variable); list2.Add(value); } else { list2[list1.IndexOf(variable)] = value; } } ///  /// Remove the variable if it exists ///  /// Name or ID of the variable public void Remove(ssortingng variable) { if (list1.Contains(variable)) { list2.RemoveAt(list1.IndexOf(variable)); list1.RemoveAt(list1.IndexOf(variable)); } } ///  /// Clears the variable list ///  public void Clear() { list1.Clear(); list2.Clear(); } ///  /// Get the value of the variable if it exists ///  /// Name or ID of the variable /// Value public T Get(ssortingng variable) { if (list1.Contains(variable)) { return (list2[list1.IndexOf(variable)]); } else { return default(T); } } ///  /// Get a ssortingng list of all the variables ///  /// List ssortingng public List GetList() { return (list1); } } }