I have a method that gets a number of objects of this class
class Range
{
public T Start;
public T End;
}
In my case
static void Main(string[] args) {
List> ranges = new List>()
{
new Range(3,9),
new Range(1,5),
new Range(11,15),
new Range(12,14),
new Range(13,20),
};
var orderedRanges = ranges.OrderBy(r => r.Start);
var lastRange = new Range(orderedRanges.First().Start, orderedRanges.First().End);
List> newranges = new List>();
newranges.Add(lastRange);
foreach (var range in orderedRanges.Skip(1)) {
if (range.Start >= lastRange.Start && range.Start <= lastRange.End && range.End > lastRange.End) {
lastRange.End = range.End;
}
else if (range.Start > lastRange.End) {
lastRange = new Range(range.Start, range.End);
newranges.Add(lastRange);
}
}
foreach (var r in newranges) {
Console.WriteLine("{0}, {1}", r.Start, r.End);
}
}
Something like this. Didn't verify that it works with all inputs.