首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中将List<List<T>>转换为List<T>

在C#中将List<List<T>>转换为List<T>
EN

Stack Overflow用户
提问于 2009-01-20 20:06:07
回答 3查看 16K关注 0票数 22

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

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

代码语言:javascript
运行
复制
List<int> allInts = new List<int>();

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

有什么建议吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-20 20:12:46

代码语言:javascript
运行
复制
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

但这些天我实际上会写成

代码语言:javascript
运行
复制
var result2 = l.SelectMany(i => i).Distinct();
票数 60
EN

Stack Overflow用户

发布于 2009-01-20 20:36:08

代码语言:javascript
运行
复制
List<int> result = listOfLists
  .SelectMany(list => list)
  .Distinct()
  .ToList();
票数 16
EN

Stack Overflow用户

发布于 2009-01-20 20:09:49

这样如何:

代码语言:javascript
运行
复制
HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
    set.UnionWith(list);
}
return set.ToList();
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/462879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档