gpt4 book ai didi

c# - 在 IEnumerable 集合中查找所有受抚养子女的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-30 15:10:32 25 4
gpt4 key购买 nike

我有一个包含 2 个表的数据库:

  1. 项目
  2. 项目依赖

项目有ID键

ItemDependencies 有两列:ItemIdDependsOnItemId

我将其转化为一个集合:

 IEnumerable<Item> items = GetItems();

每个 item 都有一个:Dependencies 属性,它是一个

List<Item>

所以我想将初始项目列表过滤为:

  1. 给定一个项目,我想要该项目的列表以及递归依赖于该项目的所有项目。

  2. 给定一个项目,我想要一个该项目及其依赖的所有其他项目的列表(也是递归的)。

在 C#、LINQ 或任何其他可以解决问题的方法中,执行此操作的最佳方法是什么。

最佳答案

要获取元素的所有依赖项的列表,您可以使用以下递归函数:

IEnumerable<Item> GetAllDependencies(Item i)
{
IEnumerable<Item> a = new Item[] { i };
IEnumerable<Item> b = i.Dependencies
.SelectMany(d => GetAllDependencies(d))
.Distinct();
return a.Concat(b);
}

此方法假定依赖链中没有循环(如果有循环,它将递归调用自身,直到抛出 StackOverflowException)。

相反,我建议构建一个新的数据结构来保存反向依赖关系,然后重用相同的技术。

关于c# - 在 IEnumerable 集合中查找所有受抚养子女的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272498/

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