作为合并重叠范围方法的后续,我想尝试创建一个将相邻范围组合的方法。
基本上,在运行折叠方法后,您可能会得到例如1到5和6到10。我想将它们组合成一个范围,即1到10。
到目前为止,这是我想出的方法,但它并不真正有效。有人发现我的问题或有更好的替代方案吗?
基本上,在运行折叠方法后,您可能会得到例如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;
}
}