web-dev-qa-db-fra.com

Comment obtenir les valeurs du dictionnaire sous forme de liste générique

Je veux juste obtenir une liste des valeurs du dictionnaire, mais ce n'est pas si simple qu'il y paraît!

voici le code:

Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???

J'essaie :

List<MyType> items = new List<MyType>(myDico.values)

Mais ça ne marche pas :-(

52
Florian

Bien entendu, myFico.Values ​​est List<List<MyType>>.

Utilisez Linq si vous voulez aplatir vos listes

var items = myDico.SelectMany (d => d.Value).ToList();
49
VdesmedT

Que diriez-vous:

var values = myDico.Values.ToList();
83
Slicedbread

Une autre variante:

    List<MyType> items = new List<MyType>();
    items.AddRange(myDico.values);
25
shoma13

Vous voudrez probablement aplatir toutes les listes de Values en une seule liste:

List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
25
SLaks

Mon OneLiner:

var MyList = new List<MyType>(MyDico.Values);
8
Mathias Vetsch

Pour aller plus loin dans la réponse de Slaks, si une ou plusieurs listes de votre dictionnaire sont nulles, un System.NullReferenceException Sera lancé lors de l'appel de ToList(), jouez en toute sécurité:

List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
1
Stacked
Dictionary<string, MyType> myDico = GetDictionary();

var items = myDico.Select(d=> d.Value).ToList();
0
CharithJ

Utilisez ceci:

List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
    items.AddRange(value);

Le problème est que chaque clé de votre dictionnaire a une liste d'instances comme valeur. Votre code fonctionnerait si chaque clé avait exactement une instance comme valeur, comme dans l'exemple suivant:

Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);
0
Daniel Hilgarth

Une autre variante que vous pourriez aussi utiliser

MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();
0
johnny 5
        List<String> objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" };
        List<String> objListDirection = new List<String>() { "East", "West", "North", "South" };

        Dictionary<String, List<String>> objDicRes = new Dictionary<String, List<String>>();
        objDicRes.Add("Color", objListColor);
        objDicRes.Add("Direction", objListDirection);
0
sathis