Словарь в список (C #) - PullRequest
       3

Словарь в список (C #)

3 голосов
/ 06 октября 2011

Не совсем проблема, но мне любопытно, есть ли лучший способ сделать это. По сути, у меня есть словарь, где ключ - это структура, которую я создал. Что мне нужно сделать, это получить список определенного свойства в ключах. То есть в структуре у меня есть поле с именем 'ID', которое я хочу получить список. То, что я делаю сейчас, это:

List<long> keys = new List<long>();
foreach(var key in dict.Keys)
{
     keys.Add(key.ID);
}

Это работает, но мне просто интересно, упускаю ли я еще более простой способ - сначала я подумал, что, возможно, методу ToList можно дать параметр, чтобы я мог указать, какую часть структуры я хочу в списке, но кажется, я не могу.

Как бы вы улучшили это, ребята?

Ответы [ 4 ]

10 голосов
/ 06 октября 2011

Вы можете использовать LINQ:

List<long> keys = dict.Keys.Select(k => k.ID).ToList();

Здесь вы передаете идентификатор в Select() вместо ToList() и вызываете только ToList(), чтобы преобразовать полученную коллекцию в список.

6 голосов
/ 06 октября 2011

Использование Select (из Linq) для проекции и ToArray для создания конкретного списка.(Или ToList, если вам нужно изменить полученную коллекцию позже)

var keys = dict.Keys.Select(k => k.ID).ToArray();
4 голосов
/ 06 октября 2011

Использование Linq:

var keys = dict.Keys.Select(p => p.ID).ToList();

Использование одного из конструкторов List

var keys = new List<long>(dict.Keys.Select(p => p.ID));

(конструктор принимает IEnumerable<T>, а Select на dict.Keys явно так и есть)

и с использованием AddRange

var keys = new List<long>();
keys.AddRange(dict.Keys.Select(p => p.ID));

Как правило, мы используем .Select "из" Linq для решения проблемы. Ясно, что мы могли бы написать:

from p in dict.Keys select p.ID 

вместо

dict.Keys.Select(p => p.ID)

Замечу, единственное интересное отличие - это AddRange: другие «способы» создают новый List и заполняют его. AddRange добавляет к уже существующему List, в котором уже могут быть элементы.

0 голосов
/ 06 октября 2011

используйте linq для возврата идентификаторов в виде списка:

List<long> result = dic.Select(x => x.Key.ID).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...