web-dev-qa-db-fra.com

Convertir les valeurs du dictionnaire en tableau

Quel est le moyen le plus efficace de transformer la liste de valeurs d'un dictionnaire en tableau?

Par exemple, si j'ai un DictionaryKey est String et Value est Foo, je veux obtenir Foo[]

J'utilise VS 2005, C # 2.0

77
leora
// dict is Dictionary<string, Foo>

Foo[] foos = new Foo[dict.Count];
dict.Values.CopyTo(foos, 0);

// or in C# 3.0:
var foos = dict.Values.ToArray();
116
Matt Hamilton

Rangez-le dans une liste. C'est plus facile;

List<Foo> arr = new List<Foo>(dict.Values);

Bien sûr, si vous le voulez spécifiquement dans un tableau;

Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
11
Steztric

Il existe une fonction ToArray () sur les valeurs:

Foo[] arr = new Foo[dict.Count];    
dict.Values.CopyTo(arr, 0);

Mais je ne pense pas que ce soit efficace (je n'ai pas vraiment essayé, mais je suppose qu'il copie toutes ces valeurs dans le tableau). Avez-vous vraiment besoin d'un tableau? Sinon, j'essaierais de passer IEnumerable:

IEnumerable<Foo> foos = dict.Values;
5
Grzenio

Si vous souhaitez utiliser linq, essayez donc de suivre:

Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();

Je ne sais pas lequel est le plus rapide ou le meilleur. Les deux travaillent pour moi.

4
Piotr Czyż

Ces jours-ci, une fois que LINQ est disponible, vous pouvez convertir les clés du dictionnaire et leurs valeurs en une seule chaîne.

Vous pouvez utiliser le code suivant:

// convert the dictionary to an array of strings
string[] strArray = dict.Select(x => ("Key: " + x.Key + ", Value: " + x.Value)).ToArray();

// convert a string array to a single string
string result = String.Join(", ", strArray);
1
Lior Kirshner