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
Odpowiedzi:
// 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;
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:
IEnumerable<Foo> foos = dict.Values;
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.
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);