Подтвердить что ты не робот

Сгладить словарь С# списков с Linq

У меня есть словарь в С#:

Dictionary<string, List<string>>

Как я могу использовать Linq, чтобы сгладить это в один List<string>, который содержит все списки в словаре?

Спасибо!

4b9b3361

Ответ 1

Очень легко:

var list = dictionary.Values              // To get just the List<string>s
                     .SelectMany(x => x)  // Flatten
                     .ToList();           // Listify

Здесь вызов SelectMany принимает последовательность входов (списки, которые делают значения словаря), и проектирует каждый отдельный вход в другую последовательность выходов - в данном случае "элементы списка". Затем он выравнивает последовательность последовательностей в одну последовательность.

Ответ 2

в качестве запроса

var flattened = from p in dictionary
                from s in p.Value
                select s;

или как методы...

var flattened = dictionary.SelectMany(p => p.Value);

Мне нравится это по сравнению с другими, поскольку я передаю весь словарь в запрос Linq, а не только значения.

Ответ 3

SelectMany - самый простой способ сгладить вещи:

Dictionary.Values.SelectMany(x => x).ToList()

Ответ 4

Предполагая, что у вас есть экземпляр с именем dict:

dict.SelectMany(pair => pair.Value.Select(str => str));

Ответ 5

Вы должны попробовать что-то вроде этого:

dict.Values.Aggregate(new List<String>(), (a, b) => a.Concat(b));