C#:从IEnumerable <ienumerable <t>&gt; </ienumerable <t>获取不同的T

时间:2014-04-04 14:44:58

标签: 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

1 个答案:

答案 0 :(得分:10)

您需要Enumerable.SelectMany

  

将序列的每个元素投影到IEnumerable并展平   将得到的序列分成一个序列

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

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

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

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