Как наиболее эффективно превратить список значений словаря в массив?
Например, если у меня есть 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;
Сохраните его в списке. Легче;
List<Foo> arr = new List<Foo>(dict.Values);
Конечно, если вам нужен именно массив;
Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
источник
Для Values есть функция ToArray ():
Foo[] arr = new Foo[dict.Count]; dict.Values.CopyTo(arr, 0);
Но я не думаю, что это эффективно (я действительно не пробовал, но думаю, он копирует все эти значения в массив). Вам действительно нужен массив? Если нет, я бы попробовал передать IEnumerable:
источник
Если вы хотите использовать 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);
источник