gpt4 book ai didi

c# - 使用 Linq 展平嵌套列表而不是 foreach 循环

转载 作者:行者123 更新时间:2023-11-30 13:53:48 25 4
gpt4 key购买 nike

我有一个循环类(class) - 我在下面对其进行了简化。

public class SiloNode
{
public string Key { get; private set; }
public string Url { get; private set; }
public List<SiloNode> Children { get; private set; }
}

尽管理论上它可以永远嵌套,但节点只会下降两层。所以,顶级节点可以有 child ,但 child 不能有 child 。

我有一个包含所有顶级节点及其嵌套子节点的主列表。

但是,我需要将所有节点放入一个平面列表中 - 节点 1、其子节点、节点 2 等。

我在这方面的知识有限,但我可以在主列表上执行类似 foreach 的操作并创建一个新列表,如下所示:

public IEnumerable<SiloNode> GetLinks(IEnumerable<SiloNode> masterList)
{
var newList = new List<SiloNode>();

foreach (var node in masterList)
{
newList.Add(node);
newList.AddRange(node.Children);
}

return newList;
}

不过,我知道可能有更好的方法可用,但我就是不知道如何将 foreach 转换成一个 Linq 语句来做同样的事情事物。换句话说,同时选择父项和它的子项。

感谢任何帮助。

最佳答案

您可以使用SelectMany,只需连接单亲及其 child :

List<SiloNode> newList = masterList.SelectMany(n => new[]{ n }.Concat(n.Children)).ToList();

关于c# - 使用 Linq 展平嵌套列表而不是 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52187650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com