У меня есть список элементов, которые отношение частичного порядка, i. e, список можно рассматривать как частично упорядоченный набор. Я хочу отсортировать этот список так же, как в этом question. Как правильно ответил там, это называется топологическая сортировка.
Существует достаточно простой известный алгоритм для решения проблемы. Я хочу реализовать LINQ-подобную реализацию.
Я уже пытался использовать метод расширения OrderBy
, но я уверен, что он не сможет сделать топологическую сортировку. Проблема в том, что интерфейс IComparer<TKey>
не может представлять частичный порядок. Это происходит потому, что метод Compare
может возвращать в основном 3 вида значений: ноль, отрицательный и положительный, что означает , меньше, а - больше, а затем, соответственно. Рабочее решение было бы возможно только в том случае, если бы был способ вернуть несвязанные.
С моей предвзятой точки зрения ответ, который я ищу, может состоять из интерфейса IPartialOrderComparer<T>
и метода расширения следующим образом:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IPartialOrderComparer<TKey> comparer
);
Как это будет реализовано? Как выглядит интерфейс IPartialOrderComparer<T>
? Вы порекомендовали бы другой подход? Я очень хочу это увидеть. Может быть, есть лучший способ представить частичный порядок, я не знаю.