在 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&lt;List&lt;int&gt;&gt;。我想将其转换为 List&lt;int&gt; ,其中每个 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?

在 C# 中将 XML 字符串解析为 List/DataTable

在 WinForm 中将 List<T> 绑定到 DataGridView