我有一个List<List<String>>
,其中包含
{ {"A" , "B" },
{"C" , "D" }
}
我需要将所有内部列表合并到另一个列表中
因此生成的List<String>
将包含
{"A","B","C","D"}
现在我使用for loop
来执行此操作
有没有办法使用LINQ
或Lambda Expression
。
请帮我这样做。
提前致谢。
答案 0 :(得分:14)
List<List<string>> collections = new List<List<string>>()
{
new List<string>(){"A" , "B" },
new List<string>() {"C" , "D" }
};
var list = collections.SelectMany(x => x).ToList();
SelectMany构建一个表达式树,在评估时将列表列表展平为单个组合成员列表。
ToList强制对表达式树进行求值,并生成一个List。
如果您想消除重复项,可以在调用“ToList()”之前添加一个Distinct调用
答案 1 :(得分:13)
不完全是联盟,但你可以试试这个
YourList.SelectMany(l=>l).Distinct()
答案 2 :(得分:3)
您可以使用SelectMany扩展程序。
List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } };
IEnumerable<string> results = masterList.SelectMany(l => l);
答案 3 :(得分:3)
var result = myLists.SelectMany(l => l);
答案 4 :(得分:3)
聚合怎么样?
myLists.Aggregate((left, right) => left.Union(right));
对我来说,这比使用SelectMany更具表现力,因为它正在告诉你你到底在做什么:通过在所有列表上调用union来聚合列表列表。
答案 5 :(得分:1)
只是为了踢:
(from list in theList from e in list select e).Distinct().ToList()
这当然与@Alexander Taran的解决方案相同,只是使用查询语法而不是lambda语法。 (或者至少它应该是 - 我没有我的LINQPad方便。)