Сгладить словарь С# списков с Linq
У меня есть словарь в С#:
Dictionary<string, List<string>>
Как я могу использовать Linq, чтобы сгладить это в один List<string>
, который содержит все списки в словаре?
Спасибо!
Ответы
Ответ 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));