Als Folge der Methode collapses overlapping ranges dachte ich, ich würde versuchen, eine Methode zu erstellen, die benachbarte Bereiche kombiniert.C#: Kombinieren benachbarter Bereiche
Grundsätzlich nach dem Zusammenbruch Verfahren laufen Sie mit zum Beispiel am Ende kann 1 bis 5 und 6 bis 10 würde Ich mag diese in einem Bereich kombinieren, 1 bis 10.
Dies ist, was ich gekommen bin, bis jetzt, aber es funktioniert nicht wirklich gut. Hat jemand mein Problem entdeckt oder eine gute Alternativlösung?
public static IEnumerable<Range<T>> MergeAdjacent<T>(this IEnumerable<Range<T>> source, Func<T, T, bool> isAdjacent)
{
using (var sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
yield break;
var first = sourceIterator.Current;
while (sourceIterator.MoveNext())
{
var second = sourceIterator.Current;
if (isAdjacent(first.End, second.Start))
{
yield return Range.Create(first.Start, second.End);
}
else
yield return first;
first = second;
}
yield return first;
}
}
@Svish, haben Sie überprüft, meine Lösung? War das nicht was du wolltest? –
Habe noch keine der Antworten getestet. Will tun, wenn ich am Montag wieder zur Arbeit komme =) – Svish