Добавление элементов в список словаря с одинаковыми ключами

152
29 апреля 2019, 06:00

Есть список вида

 List<Person> people = new List<Person>();
 people.Add(new Person() { Name = "Том", Id = "Id_1" });
 people.Add(new Person() { Name = "Том", Id = "Id_2" });
people.Add(new Person() { Name = "Ипполит", Id = "Id_3" });
people.Add(new Person() { Name = "Евкакий", Id = "Id_4" });
people.Add(new Person() { Name = "Евкакий", Id = "Id_5" });

То есть имена могут повторяться, а Id - нет. Хочу создать словарь типа Dictionary<string, List<string>>, чтобы у ключа был список из Id-шников. Как это можно сделать? То есть Том:[Id_1, Id_2], Ипполит:[Id_3], Евкакий:[Id_4, Id_5] Пробую вот так, но записывается только первый элемент

            foreach (var eee in people)
        {
            var key = eee.Name;
            if (!dictionaryElement.ContainsKey(key))
            {
                dictionaryElement[key] = new List<Id>();
                dictionaryElement[key].Add(eee.Id);
            }
        }

Заранее спасибо!

Answer 1
if (!dictionaryElement.ContainsKey(key))
    dictionaryElement[key] = new List<Id>();
dictionaryElement[key].Add(eee.Id);
Answer 2
Dictionary<string, string> peopleDic1
                                    = people.GroupBy(p => p.Name)
                                            .Select(g => new
                                            {
                                                Name = g.Key,
                                                Ids = people
                                                            .Where(p => p.Name == g.Key)
                                                            .Aggregate(String.Empty,
                                                                       (a, n) => a + ", " + n.Id)
                                            })
                                            .ToDictionary(n => n.Name, n => n.Ids.Remove(0, 2));
Dictionary<string, List<string>> peopleDic2
                                    = people.GroupBy(p => p.Name)
                                            .Select(g => new
                                            {
                                                Name = g.Key,
                                                Ids = people
                                                        .Where(p => p.Name == g.Key)
                                                        .Aggregate(new List<string>(),
                                                                   (acc, p) => { acc.Add(p.Id); return acc; })
                                            })
                                            .ToDictionary(n => n.Name, n => n.Ids);
READ ALSO
C# SQLite Как удалить файл базы данных?

C# SQLite Как удалить файл базы данных?

Намеренно удаляю базу данных, делаю запрос и обрабатываю ошибки, и остается от БД

186
Неясности с интерфейсом (interface)

Неясности с интерфейсом (interface)

Объясните, что в данном примере обозначает параметр <T>, и в чем будет коренная разница от реализации данной ниже?

154
При обновлении БД (MSSQL) возникает ошибка &ldquo;There is already an object named &#39;Weapons&#39; in the database.&rdquo;

При обновлении БД (MSSQL) возникает ошибка “There is already an object named 'Weapons' in the database.”

При запуске команды update-database происходит ошибка:

163
Перевести sql запрос в Laravel с помощью Eloquent ORM или Query Builder

Перевести sql запрос в Laravel с помощью Eloquent ORM или Query Builder

Есть 3 таблицы (CAT_OBL, CAT_STATION, TOS_MES), 1-я и 2-я связаны между собой по полю OBL_ID, 2-я и 3-я таблицы связанны по полю IND_STНужно вывести данные из 3-й таблицы...

163