C#:从 IEnumerable<IEnumerable<T>> 获取不同的 T

标签 c# .net linq ienumerable

假设有一个对象IEnumerable<IEnumerable<T>> ,从该对象中获取不同 T 列表的最简洁方法是什么?

示例代码:

var listOfLists = new List<List<string>>();

listOfLists.Add(new string[] {"a", "b", "c", "c"}.ToList());
listOfLists.Add(new string[] {"a", "f", "g", "h"}.ToList());
listOfLists.Add(new string[] {"j", "k", "l"}.ToList());

List<string> distinctList = listOfLists.MagicCombinationOfEnumerableMethods();

Console.WriteLine(string.Join(", ", distinctList));

输出会是这样的:

a, b, c, f, g, h, j, k, l

最佳答案

你需要Enumerable.SelectMany

Projects each element of a sequence to an IEnumerable and flattens the resulting sequences into one sequence

List<string> distinctList = listOfLists.SelectMany(r => r).Distinct().ToList();

您还可以修改代码以在列表中添加元素,例如:

listOfLists.Add(new List<string> {"a", "b", "c", "c"});

而不是创建数组然后将其转换为列表。

关于C#:从 IEnumerable<IEnumerable<T>> 获取不同的 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865921/

相关文章:

c# - 如何捕获 Web API 2 中的所有异常?

c# - 使用 Dapper 在 Linq 中进行多对多

c# - 按月将一个列表拆分为多个 - C#、Linq

c# - LINQ 通过 2 个属性和创建日期来区分

javascript - Controller Action 完成时隐藏 div

c# - 不同语言发展的相对成本研究

c# - JsonDiffpatch().Diff() 无法比较电子邮件地址和长度超过 50 个字符的字符串?

.net - WinForms - 如何在不传递委托(delegate)的情况下从单独的线程访问/调用 UI 线程中的方法?

c# - Entity Framework 和事务隔离级别

c# - 为什么我无法将此泛型类型的实例添加到集合中?