如何按依赖对依赖的对象进行排序

How to sort depended objects by dependency(如何按依赖对依赖的对象进行排序)
本文介绍了如何按依赖对依赖的对象进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个收藏:

列表<VPair<Item, List<Item>>依赖层次结构;

对中的第一个项目是某个对象(项目),第二个是第一个所依赖的相同类型对象的集合.我想按依赖顺序获取 List<Item> ,因此没有项目依赖于第一个元素等等(没有循环依赖!).

输入:

<上一页>Item4 依赖于 Item3 和 Item5Item3 依赖于 Item1Item1 不依赖于任何一个Item2 依赖于 Item4Item5不依赖任何一个

结果:

<上一页>项目1项目5第 3 项项目4项目2

谢谢.

解决方案:

拓扑排序(感谢 Loïc Février 的想法)

C# 示例, Java 示例(感谢 xcud 示例)

解决方案

使用拓扑排序的完美示例:

http://en.wikipedia.org/wiki/Topological_sorting

它会为您提供您所需要的.

I have a collection:

List<VPair<Item, List<Item>> dependencyHierarchy;

The first item in pair is some object (item) and the second one is a collection of the same type objects that the first one depends on. I want to get a List<Item> in order of dependency, so there are not items that depend on the first element and so on (no cycled dependency!).

Input:

Item4 depends on Item3 and Item5
Item3 depends on Item1
Item1 does not depend on any one
Item2 depends on Item4 
Item5 does not depend on any one 

Result:

Item1
Item5
Item3
Item4
Item2

Thank you.

SOLUTION:

Topological Sorting (thanks to Loïc Février for idea)

and

example on C#, example on Java (thanks to xcud for great examples)

解决方案

Perfect example to use a topological sort :

http://en.wikipedia.org/wiki/Topological_sorting

It will give you exactly what you need.

这篇关于如何按依赖对依赖的对象进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)