2016-04-08 3 views
1

У меня есть список из моего классаДобавление списка класса в словаре C#

List<Example> exampleList 

Какие уже есть все данные внутри него. Мне нужно создать словарь

Dictionary<string, List<Example>> exampleDictionary 

Ключ должен быть Example.Name и значение потребности в примере

Вот мой код ниже. Проблема заключается в примере. Имя может быть одинаковым. Мне нужно сгруппировать по имени. Мне нужно пройти через мой список, и если имя не существует, добавьте новый ключ и значение, иначе добавьте значение в ключ. Я знаю, что настрою это неправильно, но я не могу понять, как правильно это сделать.

foreach(var x in exampleList) 
{ 
    if(!exampleDictionary.ContainsKey(x.Name) 
     exampleDictionary.Add(x.Name, x) 
    else 
     exampleDictionary[x.Name] = x;  
} 

Я знаю, что этот код не будет построен. Я не знаю, как это сделать.

ответ

4

Вы можете использовать LookUp() метод расширения:

var lookup = exampleList.ToLookUp(e => e.Name); 

Этот метод возвращает Lookup<string, Example>, один-ко-многим словарь, который отображает ключи в коллекции значений.

Но ваш код может быть исправлена ​​группировка по Name и добавляя каждую группу exampleDictionary:

foreach (var g in exampleList.GroupBy(e => e.Name)) 
    exampleDictionary.Add(g.Key, g.ToList()); 

Или

var exampleDictionary = exampleList.GroupBy(e => e.Name).ToDictionary(g => g.Key, g => g.ToList()); 
+0

Спасибо за объяснения и различные варианты. Это сделало именно то, что мне было нужно. – ChelseaBlue1

1

Это должно работать

Dictionary<string, List<Example>> exampleDictionary = new Dictionary<string, List<Example>>(); 

foreach(var x in exampleList) 
{ 
    if(!exampleDictionary.ContainsKey(x.Name)) { 
     exampleDictionary[x.Name] = new List<Example>(); 
    } 
    exampleDictionary[x.Name].Add(x);  
} 
1

Вы также можете использовать ToDictionary метод расширения для достижения того, что вы делаете т:

Dictionary<string, List<Example>> exampleDictionary=exampleList.GroupBy(e => e.Name) 
                   .ToDictionary(g => g.Key,g.ToList()); 
+0

, но e.Name не является ключом, он может выбрасывать исключение – George

+0

вправо, позвольте мне исправить это – octavioccl

1

В основном так же, как user469104 (+1)

List<Example> le = new List<Example>() { new Example("one"), new Example("one"), new Example("two") }; 
Dictionary<string, List<Example>> de = new Dictionary<string,List<Example>>(); 
foreach (Example e in le) 
{ 
    if (de.ContainsKey(e.Name)) 
     de[e.Name].Add(e); 
    else 
     de.Add(e.Name, new List<Example>() { e }); 
} 
Смежные вопросы