У меня есть метод, который получает несколько объектов этого класса
class Range<T>
{
public T Start;
public T End;
}
В моем случае T
есть DateTime
, но для простоты используйте int
. Мне нужен метод, который сворачивает эти диапазоны в те, которые охватывают один и тот же "area", но не перекрываются.
Итак, если у меня были следующие диапазоны
- от 1 до 5
- От 3 до 9
- от 11 до 15
- от 12 до 14
- от 13 до 20
Метод должен дать мне
- от 1 до 9
- от 11 до 20
Угадайте, что это будет называться профсоюзом? Я предполагаю, что подпись метода может выглядеть примерно так:
public static IEnumerable<Range<T>> Collapse<T>(
this IEnumerable<Range<T>>,
IComparable<T> comparer)
{
...
}
Я рассмотрел некоторые другие вопросы, похожие на подобные вопросы, но я пока не нашел реализации. Этот ответ и некоторые другие ответы на один и тот же вопрос описывают алгоритмы, но я не совсем уверен, понимаю ли я алгоритмы. Не особенно хорошо при реализации алгоритмов, так что я надеялся, что кто-то здесь может помочь мне.