如何联合列表<list <string>&gt;在C#</list <string>中

时间:2010-12-23 04:30:00

标签: c# linq lambda

我有一个List<List<String>>,其中包含

{  {"A" , "B" }, 
   {"C" , "D" }
}

我需要将所有内部列表合并到另一个列表中

因此生成的List<String>将包含

     {"A","B","C","D"}

现在我使用for loop来执行此操作

有没有办法使用LINQLambda Expression

执行此操作

请帮我这样做。

提前致谢。

6 个答案:

答案 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方便。)