Який найефективніший спосіб перетворення списку значень словника в масив?
Наприклад, якщо у мене є Dictionary
де Key
є String
і Value
є Foo
, я хочу отриматиFoo[]
Я використовую 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;
Існує функція ToArray () у значеннях:
Foo[] arr = new Foo[dict.Count];
dict.Values.CopyTo(arr, 0);
Але я не думаю, що це ефективно (я насправді не пробував, але, мабуть, він копіює всі ці значення в масив). Вам справді потрібен масив? Якщо ні, я спробував би здати IEnumerable:
IEnumerable<Foo> foos = dict.Values;
Якщо ви хочете використовувати linq, ви можете спробувати наступне:
Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();
Я не знаю, який з них швидший чи кращий. Обидва працюють на мене.
dict.Values.ToArray()
робить те саме, але без накладних витрат на матеріалізацію кожного значення через делегата.
У наші дні, коли у вас є LINQ, ви можете перетворити ключі словника та їх значення в один рядок.
Ви можете використовувати наступний код:
// 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);