转换列表<list <t>&gt;到C#</t> </list <t>中的List <t>

时间:2009-01-20 20:06:07

标签: c# linq generics list union

我有List<List<int>>。我想将其转换为List<int>,其中每个int都是唯一的。我想知道是否有人使用LINQ有一个优雅的解决方案。

我希望能够使用Union方法,但它会创建一个新的List&lt;&gt;每次。所以我想避免做这样的事情:

List<int> allInts = new List<int>();

foreach(List<int> list in listOfLists)
   allInts = new List<int>(allInts.Union(list));

有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:44)

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();

更新09.2013

但是这些天我真的把它写成

var result2 = l.SelectMany(i => i).Distinct();

答案 1 :(得分:15)

List<int> result = listOfLists
  .SelectMany(list => list)
  .Distinct()
  .ToList();

答案 2 :(得分:10)

怎么样:

HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
    set.UnionWith(list);
}
return set.ToList();