83 votes

Convertir les valeurs du dictionnaire en tableau

Quelle est la manière la plus efficace de transformer la liste des valeurs d'un dictionnaire en un tableau ?

Par exemple, si j'ai un DictionaryKey es String y Value es Foo Je veux obtenir Foo[]

J'utilise VS 2005 et C# 2.0.

130voto

Matt Hamilton Points 98268
// 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();

0 votes

L'extension .ToArray<Foo>() est-elle plus performante ?

0 votes

Mais comment savoir si c'est le plus efficace ?

0 votes

Je ne vois pas comment ToArray() pourrait être plus rapide que la copie directe - qui semble être minimaliste.

16voto

Steztric Points 577

Enregistrez-la 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();

6voto

Grzenio Points 16802

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 ? Si non, j'essaierais de passer IEnumerable :

IEnumerable<Foo> foos = dict.Values;

5voto

Piotr Czyż Points 822

Si vous souhaitez utiliser linq, vous pouvez essayer ce qui suit :

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 fonctionnent pour moi.

3 votes

dict.Values.ToArray() fait la même chose, mais sans les frais généraux de matérialisation de chaque valeur par un délégué.

2voto

Lior Kirshner Points 321

De nos jours, une fois que vous disposez de LINQ, 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X