Mam metodę, która pobiera liczbę obiektów tej klasyJaki jest dobry, ogólny algorytm do zwijania zestawu potencjalnie nakładających się zakresów?
class Range<T>
{
public T Start;
public T End;
}
W moim przypadku T
jest DateTime
, ale pozwala używać int
dla prostoty. Chciałbym metodę, która zawija te zakresy do tych, które obejmują ten sam "obszar", ale nie pokrywają się.
Jeśli więc miała następujące zakresy
- 1 do 5
- 3 do 9
- 11 do 15
- 12 do 14
- 13 do 20
Metoda powinna dać mi
- 1 do 9
- 11 do 20
Guess by to nazwać związkiem? Wyobrażam sobie, że podpis metoda mogłaby wyglądać tak:
public static IEnumerable<Range<T>> Collapse<T>(
this IEnumerable<Range<T>>,
IComparable<T> comparer)
{
...
}
Mam spojrzał na kilka innych pytań tutaj, że są trochę podobne, ale nie znalazłem implementację tego jeszcze. This answer i kilka innych odpowiedzi na to samo pytanie opisuje algorytmy, ale nie jestem do końca pewien, czy rozumiem algorytmy. Niezbyt dobrze radził sobie także z wdrażaniem algorytmów, więc miałem nadzieję, że ktoś tutaj może mi pomóc.
+1, uwielbiam strzelanki z dobrym algorytmem! – grenade
Zdecydowanie +1. To, co z tego wyniknie, byłoby wspaniale mieć w zestawie narzędzi! – Moose
zadawane wiele razy ... – nlucaroni