作为折叠重叠范围的方法的后续,我想我会尝试创建一种组合相邻范围的方法。
基本上,在运行 Collapse 方法后,您最终可能会得到例如 1 到 5 和 6 到 10。我想将它们组合成一个范围,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;
}
}