Ответ 1
Не обязательно Союз, но вы можете попробовать это
YourList.SelectMany(l=>l).Distinct()
У меня есть List<List<String>>
, который содержит
{ {"A" , "B" },
{"C" , "D" }
}
Мне нужно объединить весь внутренний список в другой список
Таким образом, полученный List<String>
будет содержать
{"A","B","C","D"}
Теперь im использует for loop
для этого
Есть ли способ сделать это с помощью LINQ
или Lambda Expression
.
Пожалуйста, помогите мне сделать это.
Спасибо заранее.
Не обязательно Союз, но вы можете попробовать это
YourList.SelectMany(l=>l).Distinct()
List<List<string>> collections = new List<List<string>>()
{
new List<string>(){"A" , "B" },
new List<string>() {"C" , "D" }
};
var list = collections.SelectMany(x => x).ToList();
SelectMany создает дерево выражений, которое при оценке выравнивает список списка до одного списка объединенных элементов.
ToList заставляет дерево выражений оцениваться и которое приводит к списку.
Если вы хотите удалить дубликаты, вы можете добавить отдельный вызов перед вызовом "ToList()"
Вы можете использовать метод расширения SelectMany.
List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } };
IEnumerable<string> results = masterList.SelectMany(l => l);
var result = myLists.SelectMany(l => l);
Как насчет агрегата?
myLists.Aggregate((left, right) => left.Union(right));
Для меня это более выразительно, чем использование SelectMany, потому что оно говорит вам, что именно вы делаете: Совокупность списка списков, вызывая объединение на всех.
Просто для пинков:
(from list in theList from e in list select e).Distinct().ToList()
Это, конечно, такое же решение, как @Alexander Taran, только с синтаксисом запроса вместо синтаксиса лямбда. (Или, по крайней мере, это должно быть: – у меня нет моей LINQPad.)