在 C# 中将 List<List<T>> 转换为 List<T>
Posted
技术标签:
【中文标题】在 C# 中将 List<List<T>> 转换为 List<T>【英文标题】:Convert List<List<T>> into List<T> in C# 【发布时间】:2009-01-20 20:06:07 【问题描述】:我有一个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));
有什么建议吗?
谢谢!
【问题讨论】:
【参考方案1】: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();
【讨论】:
这就是我要找的。只需在 Distinct 末尾添加一个 .ToList() ,我就有了我需要的东西。谢谢! +1 因为这太棒了——您是否考虑过放入“where e != null”,这样当您的列表中有一个空列表时它不会开始扔东西?【参考方案2】:List<int> result = listOfLists
.SelectMany(list => list)
.Distinct()
.ToList();
【讨论】:
【参考方案3】:怎么样:
HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
set.UnionWith(list);
return set.ToList();
【讨论】:
以上是关于在 C# 中将 List<List<T>> 转换为 List<T>的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中将 IEnumerable<T> 转换为 List<T>?
在 C# 中将 List<IEnumerable<int>> 转换为 List<int> [重复]
如何在 .NET 6 / C# 10 中将 List<String?> 转换为 List<String>?
如何在 C# 中将 List<object> 转换为 Hashtable?