我有一个List<List<String>>
,其中包含
{ {"A" , "B" },
{"C" , "D" }
}
我需要将所有的内部列表合并到另一个列表中。
因此,得到的List<String>
将包含:
{"A","B","C","D"}
现在我正在使用for循环
来做这件事
有没有使用LINQ
或Lambda表达式
来完成这个任务的方法。
请帮助我完成这个任务。
提前致谢。
我有一个List<List<String>>
,其中包含
{ {"A" , "B" },
{"C" , "D" }
}
我需要将所有的内部列表合并到另一个列表中。
因此,得到的List<String>
将包含:
{"A","B","C","D"}
现在我正在使用for循环
来做这件事
有没有使用LINQ
或Lambda表达式
来完成这个任务的方法。
请帮助我完成这个任务。
提前致谢。
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调用。
虽然不完全是 Union 操作,但你可以尝试这个方法
YourList.SelectMany(l=>l).Distinct()
your_list.flat_map {|l| l }.uniq
,但使用以下定义IDENTITY = -> x { x }
可以编写为your_list.flat_map(&IDENTITY)
。在Scala中,它将是yourList flatMap identity
,在Haskell中将是yourList >>= id
,这比yourList flatMap(e => e)
或yourList >>= \x -> x
更容易阅读。是否有YourList.SelectMany(Identity)
? - Jörg W MittagmyLists.Aggregate((left, right) => left.Union(right));
List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } };
IEnumerable<string> results = masterList.SelectMany(l => l);
var result = myLists.SelectMany(l => l);
只是为了好玩:
(from list in theList from e in list select e).Distinct().ToList()
这当然是与 @Alexander Taran 的解决方案相同,只不过使用查询语法而不是 Lambda 语法。(或者至少应该是 - 我手边没有 LINQPad。)