Jaki jest najbardziej efektywny sposób zamiany listy wartości ze 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
// 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();
using System.Linq;
Zapisz to na liście. To jest łatwiejsze;
List<Foo> arr = new List<Foo>(dict.Values);
Oczywiście, jeśli chcesz, aby było to w tablicy;
Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
źródło
W wartościach znajduje się funkcja ToArray ():
Foo[] arr = new Foo[dict.Count]; dict.Values.CopyTo(arr, 0);
Ale nie sądzę, że jest wydajny (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ę przekazać IEnumerable:
źródło
Jeśli chcesz używać linq, możesz spróbować wykonać następujące czynności:
Dictionary<string, object> dict = new Dictionary<string, object>(); var arr = dict.Select(z => z.Value).ToArray();
Nie wiem, który jest szybszy czy lepszy. Obie działają dla mnie.
źródło
dict.Values.ToArray()
robi to samo, ale bez kosztów związanych z materializacją każdej wartości przez delegata.Obecnie, gdy LINQ jest już dostępny, możesz przekonwertować klucze słownika i ich wartości na pojedynczy ciąg.
Możesz użyć następującego kodu:
// 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);
źródło