2015-03-13 2 views
5

У меня есть список и MyClass является:Список словарю <Key, Список <Value>> - C#

public class MyClass 
{ 
    public bool Selected { get; set; } 
    public Guid NoticeID { get; set; } 
    public Guid TypeID { get; set; } 
} 

Мой вопрос, как я преобразовать этот список в Dictionary<Guid, List<Guid>>, где ключ словаря является GUID из свойства TypeID, а значение представляет собой список всех значений NoticeID, соответствующих этому значению TypeID. Я попытался выглядеть примерно так:

list.GroupBy(p => p.TypeID).ToDictionary(p => p.Key, p => p.ToList()) 

но это возвращает Dictionary <Guid, List<MyClass>>, и я хочу Dictionary<Guid, List<Guid>>.

+0

Это совсем не ясно, что вы подразумеваете под «но это возвращает' > '. Какой GUID вы пытаетесь получить как ценность? –

+0

Очевидно, что TypeID является первым Guid в словаре >, а NoticeID является вторым ... Я упоминал в статье linq – raresm

+1

Это не * действительно * очевидно, учитывая, что вы на самом деле не указали это. Мы могли бы сделать это, но это был бы лучший вопрос, если бы вы прямо заявили об этом, а также указали «словарь >» вместо «a >». отредактируйте свой вопрос, чтобы показать вам, что я имею в виду, - я думаю, вы согласитесь потом, что это яснее. –

ответ

15

Ну, когда вы группа вы можете указать значение, которое требуется для каждого элемента группы:

var dictionary = list.GroupBy(p => p.TypeID, p => p.NoticeID) 
        .ToDictionary(p => p.Key, p => p.ToList()); 

Однако, я бы сильно рассмотреть вопрос об использовании поиска вместо словаря:

var lookup = list.ToLookup(p => p.TypeID, p => p.NoticeID); 

Поиск намного чище в целом:

  • Они неизменяемы, тогда как ваш подход заканчивается лизом ts, которые могут быть изменены
  • Они выражают в системе типов то, что вы пытаетесь выразить (одна клавиша для нескольких значений)
  • Они упрощают поиск ключей, возвращая пустую последовательность значений для отсутствующих ключей, чем выброс исключения
+0

Спасибо, что ознакомили меня с невероятно умным и удобным типом - может подтвердить, все еще используя словари таких списков, что этот подход намного более подходит для целей – Toadfish

Смежные вопросы