假设有一个对象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
答案 0 :(得分:10)
将序列的每个元素投影到IEnumerable并展平 将得到的序列分成一个序列
List<string> distinctList = listOfLists.SelectMany(r => r).Distinct().ToList();
您还可以修改代码,以便在列表中添加元素,如:
listOfLists.Add(new List<string> {"a", "b", "c", "c"});
而不是创建一个数组,然后将其转换为列表。