重なり合う範囲を折りたたむ方法のフォローアップとして、隣接する範囲を組み合わせた方法を作ろうと思いました。
基本的に、Collapseメソッドを実行した後、たとえば1から5および6から10になる可能性があります。これらを1から10の1つの範囲に結合したいと思います。
これは私がこれまでに思いついたものですが、実際にはうまく機能しません。誰かが私の問題を見つけたり、良い代替解決策を持っていますか?
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;
}
}