collapses overlapping rangesの方法のフォローアップとして、隣接する範囲を結合する方法を作成しようと考えました。C#:隣接する範囲を結合する
基本的に、あなたは10に5と6に例えば1で終わる可能性が折りたたみメソッドを実行した後、私は1つの範囲にそれらを結合したいと思い、1〜10
これは私が来ているものですこれまでのところ、それは本当にうまく動作しません。誰かが私の問題に気づいたり、良い代替ソリューションを持っていますか?
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、あなたは私の解決策を確認していますか?あなたが望んでいたものではありませんか? –
答えはまだテストされていません。私は月曜日に仕事に戻るときに行うだろう=) – Svish