给定类型:
class Field{
public string Name{get;set;}
public string[] DependsOn{get;set;}
}
假设我有一组 Field
项:
List<Field> fields = new List<Field>();
fields.Add(new Field() { Name = "FirstName" });
fields.Add(new Field() { Name = "FullName",
DependsOn = new[] {"FirstName","LastName"}});
fields.Add(new Field() { Name = "Age",
DependsOn = new[] { "DateOfBirth" } });
fields.Add(new Field() { Name = "LastName" });
fields.Add(new Field() { Name = "DateOfBirth" });
很明显,我们按以下顺序获取元素:
- 名字
- 全名
- 年龄
- 姓氏
- 出生日期
我的第一个问题: 重新排列我的列表/数组中的项目的最佳方法是什么,以便从属列(全名和年龄)放置在它们所依赖的列之后,即像这样:
- 名字
- 姓氏
- 全名
- 出生日期
- 年龄
所以像Age这样的字段总是在它依赖的DateOfBirth之后。
我的第二个问题:
有没有办法检测循环依赖?即当
Field1
取决于 Field2
和
Field2
取决于 Field3
和
Field3
取决于 Field1
这样我们就不会陷入困境。例如大学毕业后,您需要 2 年的工作经验才能找到工作。但要获得工作经验,您首先需要拥有这份工作。
最佳答案
听起来您需要按拓扑顺序对这些项目进行排序。网络上有很多页面,维基百科可能是一个不错的起点: http://en.wikipedia.org/wiki/Topological_sort
关于c# - 如何根据依赖关系重新排列数组中的项目?并检测任何循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/546586/