Est-il possible de créer une liste multidimensionnelle en C #? Je peux créer un tableau multidimensionnel comme ceci:
string[,] results = new string[20, 2];
Mais j'aimerais pouvoir utiliser certaines des fonctionnalités d'une liste ou d'une liste de tableaux comme pouvoir ajouter et supprimer des éléments.
Vous pouvez créer une liste de listes
public class MultiDimList: List<List<string>> { }
ou un dictionnaire de listes accessibles par clé
public class MultiDimDictList: Dictionary<string, List<int>> { }
MultiDimDictList myDicList = new MultiDimDictList ();
myDicList.Add("ages", new List<int>());
myDicList.Add("Salaries", new List<int>());
myDicList.Add("AccountIds", new List<int>());
Versions génériques, pour implémenter la suggestion dans le commentaire de @ user420667
public class MultiDimList<T>: List<List<T>> { }
et pour le dictionnaire,
public class MultiDimDictList<K, T>: Dictionary<K, List<T>> { }
// to use it, in client code
var myDicList = new MultiDimDictList<string, int> ();
myDicList.Add("ages", new List<T>());
myDicList["ages"].Add(23);
myDicList["ages"].Add(32);
myDicList["ages"].Add(18);
myDicList.Add("salaries", new List<T>());
myDicList["salaries"].Add(80000);
myDicList["salaries"].Add(100000);
myDicList.Add("accountIds", new List<T>());
myDicList["accountIds"].Add(321123);
myDicList["accountIds"].Add(342653);
ou, mieux encore, ...
public class MultiDimDictList<K, T>: Dictionary<K, List<T>>
{
public void Add(K key, T addObject)
{
if(!ContainsKey(key)) Add(key, new List<T>());
if (!base[key].Contains(addObject)) base[key].Add(addObject);
}
}
// and to use it, in client code
var myDicList = new MultiDimDictList<string, int> ();
myDicList.Add("ages", 23);
myDicList.Add("ages", 32);
myDicList.Add("ages", 18);
myDicList.Add("salaries", 80000);
myDicList.Add("salaries", 110000);
myDicList.Add("accountIds", 321123);
myDicList.Add("accountIds", 342653);
EDIT: pour inclure une méthode Add () pour l'instance imbriquée:
public class NestedMultiDimDictList<K, K2, T>:
MultiDimDictList<K, MultiDimDictList<K2, T>>:
{
public void Add(K key, K2 key2, T addObject)
{
if(!ContainsKey(key)) Add(key,
new MultiDimDictList<K2, T>());
if (!base[key].Contains(key2))
base[key].Add(key2, addObject);
}
}
vous faites juste une liste de listes comme ceci:
List<List<string>> results = new List<List<string>>();
et puis c'est juste une question d'utiliser la fonctionnalité que vous voulez
results.Add(new List<string>()); //adds a new list to your list of lists
results[0].Add("this is a string"); //adds a string to the first list
results[0][0]; //gets the first string in your first list
Pas exactement. Mais vous pouvez créer une liste de listes:
var ll = new List<List<int>>();
for(int i = 0; i < 10; ++i) {
var l = new List<int>();
ll.Add(l);
}
En fonction de vos besoins exacts, vous pouvez faire mieux avec un tableau en dents de scie avec:
List<string>[] results = new { new List<string>(), new List<string>() };
Ou vous pouvez bien faire avec une liste de listes ou une autre construction similaire.
Si vous souhaitez modifier cela, je choisirais l'une des options suivantes:
List<string[]> results;
-- ou --
List<List<string>> results;
selon vos besoins ...