Ich habe eine Methode, die eine Reihe von Objekten dieser Klasse T
Was ist ein guter, generischer Algorithmus zum Kollabieren einer Reihe potentiell überlappender Bereiche?
class Range<T>
{
public T Start;
public T End;
}
In meinem Fall bekommt ist DateTime
, sondern lässt int
der Einfachheit halber verwendet werden. Ich möchte eine Methode, die diese Bereiche in Bereiche einteilt, die denselben "Bereich" abdecken, sich aber nicht überschneiden.
Wenn ich also hatte die folgenden Bereiche
- 1 zu 5
- 3 bis 9
- 11 bis 15
- 12 bis 14
- 13 zu 20
Die Methode sollte mir
geben- 1 bis 9
- 11 zu 20
denke, es wäre eine Vereinigung genannt werden? Ich stelle mir die Methode Signatur wie folgt aussehen könnte:
public static IEnumerable<Range<T>> Collapse<T>(
this IEnumerable<Range<T>>,
IComparable<T> comparer)
{
...
}
ich auf einige andere Fragen hier ausgesehen haben, die Art ähnlich sind, aber ich habe nicht eine Implementierung dieser noch nicht gefunden. This answer und einige andere Antworten auf die gleiche Frage beschreibt Algorithmen, aber ich bin mir nicht ganz sicher, ob ich die Algorithmen verstehe. Nicht besonders gut darin, Algorithmen zu implementieren, also hoffte ich, dass mir jemand hier helfen könnte.
+1, ich liebe einen guten Algorithmus Schießerei! – grenade
Definitiv +1. Was dabei herauskommt, wäre großartig im Toolkit zu haben! – Moose
mehrmals gefragt ... – nlucaroni