Учитывая следующий список:Заказать Список зависимостями
var modules = new List<Module>() {
new Module() { Name = "Audits", Dependencies = new[] { "Logs" } },
new Module() { Name = "Blog", Dependencies = new[] { "Content", "Tags" } },
new Module() { Name = "Content", Dependencies = new[] { "Audits" } },
new Module() { Name = "Logs" },
new Module() { Name = "Tags" }
};
Мне нужно создать способ заказать этот список программно, так что модули, которые являются наиболее надежными являются на самом верху. Поэтому требуемый порядок с помощью приведенного выше примера будет:
- Журналы
- Ревизии
- Содержание
- Метки
- Блог
С "Материалы" имеет зависимость от «аудиты «тогда сначала появляется« Аудит ». Но поскольку «Аудит» имеет зависимость от «Журналов», тогда «Журналы» выходят за пределы «Аудит» и так далее. «Блог» появляется последним, поскольку он имеет зависимости от «Контента» и «Метки», и поэтому они выше.
Надеюсь, я достаточно подробно описал свою проблему. Я уверен, что есть какой-то умный алгоритм, позволяющий справиться с этим и сделать его настолько эффективным, насколько это возможно, но это намек на меня до сих пор. Я был бы признателен, если бы кто-нибудь мог указать мне в правильном направлении.
Благодаря
Я использовал следующий ответ http://stackoverflow.com/a/11027096/155899 для кода, но спасибо, что дал мне имя алгоритма, чтобы я мог найти правильное решение. – nfplee