Преобразовать словарь в список - PullRequest
0 голосов
/ 19 июня 2020

Я использую словарь Dictionary<string,List<string>>, который будет иметь такие значения, как

Key        ||        Values
1                     a,b,c
2                     d,e

Я хочу преобразовать этот словарь в список объектов типа MyClass

MyClass имеет два свойства, т.е.

Class MyClass{
 public string ID { get; set; }
 public string Name { get; set; }
}

Что будет

1 ,  a
1 ,  b
1 ,  c
2 ,  d
2 ,  e

Я пробовал некоторые вещи, например, использование Keys.Tolist и Values.ToList, но мне не удалось получить то, что мне нужно.

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

Может ли кто-нибудь помочь мне найти эффективный способ справиться с этим?

Ответы [ 2 ]

4 голосов
/ 19 июня 2020

Вы можете сделать это в одной строке и сгладить значения словаря, используя метод SelectMany, но он по-прежнему использует al oop под капотом

var dict = new Dictionary<string, List<string>>
{
    { "1", new List<string> { "a", "b", "c" } },
    { "2", new List<string> { "d", "e" } }
};

var result = dict
    .SelectMany(kvp => kvp.Value, (kvp, s) => new MyClass { ID = kvp.Key, Name = s })
    .ToList();
1 голос
/ 19 июня 2020

Вы можете сделать это, свернув список строками с помощью оператора select из LINQ. Сначала вы перебираете коллекцию словарей, а затем внутри перебираете список строк и создаете из него новые объекты. Ниже я привел пример, который должен помочь вам понять это.

    public class MyClass
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

    var list = new List<string>
    {
        "a",
        "b",
        "c"
    };

    var list2 = new List<string>
    {
        "d",
        "e"
    };

    var dict = new Dictionary<string,List<string>>();
    dict.Add("1", list);
    dict.Add("2", list2);

    var x = dict.SelectMany(x => x.Value.Select(z => new MyClass
    {
        Id = x.Key,
        Name = z
    })).ToList();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...