2008-10-13 14 views
63

Was ist die effizienteste Möglichkeit, die Werteliste eines Wörterbuchs in ein Array umzuwandeln?Konvertieren von Wörterbuchwerten in Array

Zum Beispiel, wenn ich ein Dictionary wo Key ist String und Value ist Foo, ich Foo[]

ich verwende VS 2005, C# 2,0

Antwort

97
// 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

Funktioniert die Erweiterung .ToArray () besser? – Goran

+0

Aber woher wissen wir, dass es am effizientesten ist? –

+0

Ich kann nicht sehen, wie ToArray() schneller als die direkte Kopie sein könnte - was minimalistisch zu sein scheint. –

4

Es gibt eine ToArray erhalten möchten () Funktion auf Werte:

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

Aber ich denke nicht, dass es effizient ist ent (Ich habe es nicht wirklich versucht, aber ich denke, es kopiert alle diese Werte in das Array). Brauchen Sie wirklich ein Array? Wenn nicht, würde ich versuchen, IEnumerable weitergeben müssen:

IEnumerable<Foo> foos = dict.Values; 
11

speichern sie in einer Liste. Es ist einfacher;

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

Natürlich, wenn Sie es speziell in einem Array wollen;

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

Wenn Sie möchten, Linq verwenden, so dass Sie folgende versuchen:

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

Ich weiß nicht, was man schneller oder besser ist. Beide arbeiten für mich.

+2

'dict.Values.ToArray()' tut das gleiche, aber ohne den Overhead der Materialisierung jedes Wertes durch einen Delegaten. – BACON

Verwandte Themen