I have the following ranges in interval [1-15]
I want to find the overlap ranges between people 1 & 2.
Person1 [1, 3] [5, 10] Person2 [2, 4] [8, 15]
Thanks for the clarification. What about something like this...
public static IList GetListIntersections(IList rangeList1, IList rangeList2)
{
var intersection = new List();
//add intersection of each range
foreach (var x in rangeList1)
{
foreach (var y in rangeList2)
{
var intersect = GetIntersection(x, y);
if (intersect != null)
{
intersection.Add(intersect);
}
}
}
//remove ranges that are subsets of other ranges
intersection.RemoveAll(x => intersection.Any(y => y != x && y.Start >= x.Start && y.End <= x.End));
return intersection;
}
public static Range GetIntersection(Range range1, Range range2)
{
int greatestStart = range1.Start > range2.Start ? range1.Start : range2.Start;
int smallestEnd = range1.End < range2.End ? range1.End : range2.End;
//no intersection
if (greatestStart > smallestEnd)
{
return null;
}
return new Range { Start = greatestStart, End = smallestEnd };
}