2008-10-13 22 views
63

Jaki jest najbardziej efektywny sposób przekształcania listy wartości słownika w tablicę?Konwersja wartości słownika na tablicę

Na przykład, jeśli mam Dictionary gdzie Key jest String i Value jest Foo, chcę dostać Foo[]

używam VS 2005, C# 2,0

Odpowiedz

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

Czy rozszerzenie .ToArray () działa lepiej? – Goran

+0

, ale skąd wiemy, że jest najbardziej wydajny? –

+0

Nie widzę, aby funkcja ToArray() mogła być szybsza niż prosta - co wydaje się minimalistyczne. –

4

Jest ToArray () na wartości:

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

Ale nie sądzę, że jego skuteczność ent (tak naprawdę nie próbowałem, ale myślę, że kopiuje wszystkie te wartości do tablicy). Czy naprawdę potrzebujesz tablicy? Jeśli nie, spróbuję przejść IEnumerable:

IEnumerable<Foo> foos = dict.Values; 
11

Zapisz go na liście. To jest łatwiejsze;

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

Oczywiście, jeśli konkretnie chcesz go w tablicy;

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

Jeśli chcesz używać LINQ, więc można spróbować następujących czynności:

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

Nie wiem, który z nich jest szybsza i lepiej. Obie działają dla mnie.

+2

'dict.Values.ToArray()' robi to samo, ale bez narzutu materializacji każdej wartości przez delegata. – BACON