У меня List<List<int>>. Я хотел бы преобразовать его в List<int>, где каждый int уникален. Мне было интересно, есть ли у кого-нибудь элегантное решение с использованием LINQ.
Я хотел бы иметь возможность использовать метод Union, но он каждый раз создает новый List <>. Поэтому я бы не хотел делать что-то вроде этого:
List<int> allInts = new List<int>();
foreach(List<int> list in listOfLists)
allInts = new List<int>(allInts.Union(list));
Какие-либо предложения?
Спасибо!





Как насчет:
HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
set.UnionWith(list);
}
return set.ToList();
List<List<int>> l = new List<List<int>>();
l.Add(new List<int> { 1, 2, 3, 4, 5, 6});
l.Add(new List<int> { 4, 5, 6, 7, 8, 9 });
l.Add(new List<int> { 8, 9, 10, 11, 12, 13 });
var result = (from e in l
from e2 in e
select e2).Distinct();
Но в наши дни я бы написал это как
var result2 = l.SelectMany(i => i).Distinct();
+1, потому что это круто - думали ли вы о том, чтобы добавить «where e! = Null», чтобы он не начинал бросать вещи, когда у вас есть пустой список внутри вашего списка?
List<int> result = listOfLists
.SelectMany(list => list)
.Distinct()
.ToList();
Это то, что я искал. Просто добавьте .ToList () в конец Distinct, и у меня есть то, что мне нужно. Спасибо!