【问题标题】:C#: Get distinct T from IEnumerable<IEnumerable<T>>C#:从 IEnumerable<IEnumerable<T>> 中获取不同的 T
【发布时间】:2014-04-04 14:44:58
【问题描述】:

假设有对象IEnumerable&lt;IEnumerable&lt;T&gt;&gt;,从该对象中获取不同 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

【问题讨论】:

    标签: c# .net linq ienumerable


    【解决方案1】:

    你需要Enumerable.SelectMany

    将序列的每个元素投影到 IEnumerable 并展平 将生成的序列合并为一个序列

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多