作爲collapses overlapping ranges的方法的後續,我想我會嘗試創建一種方法來組合相鄰範圍。C#:組合相鄰的範圍
基本上,運行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;
}
}
@Svish,你檢查我的解決方案?這不是你想要的嗎? – 2009-08-07 14:18:35
還沒有得到測試任何答案。當我回到星期一上班的時候會這樣做=) – Svish 2009-08-08 19:04:53