Преобразовать значения словаря в массив - PullRequest
74 голосов
/ 13 октября 2008

Какой самый эффективный способ превратить список значений словаря в массив?

Например, если у меня есть Dictionary, где Key равно String и Value равно Foo, я хочу получить Foo[]

Я использую VS 2005, C # 2.0

Ответы [ 5 ]

113 голосов
/ 13 октября 2008
// 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();
11 голосов
/ 29 марта 2012

Сохраните его в списке. Это проще;

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

Конечно, если вы конкретно хотите это в массиве;

Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
5 голосов
/ 13 октября 2008

Существует функция ToArray () для значений:

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

Но я не думаю, что это эффективно (на самом деле я не пробовал, но, думаю, он копирует все эти значения в массив). Вам действительно нужен массив? Если нет, я бы попытался передать IEnumerable:

IEnumerable<Foo> foos = dict.Values;
4 голосов
/ 21 февраля 2013

Если вы хотите использовать linq, попробуйте следующее:

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

Я не знаю, какой из них быстрее или лучше. Оба работают на меня.

1 голос
/ 19 мая 2018

В наши дни, когда у вас есть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...