LINQ合并多个列表

时间:2018-02-11 10:18:57

标签: c# list linq

我正在处理这个难题https://www.codingame.com/ide/puzzle/skynet-revolution-episode-2

在这个难题中,我必须阻止代理到达网络中的节点,每次转弯选择我想要切断的连接。我只能切断直接连接到网关的连接。

我有一个网关List<Node>网关列表。 我已经使用包含直接邻居的List<Node>连接初始化了每个节点

由于网关可以连接到多个节点,我感兴趣的是距离网关正好1个节点的节点,所以我可以识别哪个节点(让我们称之为exitNodes)代理最接近

如何将网关列表转换为退出节点列表? 我试过了

List<Node> exitNodes = gateways.Select(gw => gw.Connections).Select(node => node);

和这个

List<Node> exitNodes = gateways.Select(gw => gw.Connections.Select(node => node));

我收到错误

  

错误CS0266:无法隐式转换类型   System.Collections.Generic.IEnumerable<System.Collections.Generic.List<Node>>' to System.Collections.Generic.List”。显式转换   存在(你是否错过演员表?)

1 个答案:

答案 0 :(得分:2)

您必须使用SelectMany

如果您使用Select,那么获得Enumerable<List<Node>>SelectMany,您只能获得List<Node>

List<Node> exitNodes = gateways.SelectMany(gw => gw.Connections).Select(node => node).ToList();

这篇文章中的答案解释了SelectManySelect之间的区别: https://stackoverflow.com/a/959057/5056173