How to get overlap range of two range

后端 未结 4 1538
眼角桃花
眼角桃花 2020-12-21 09:25

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]

4条回答
  •  -上瘾入骨i
    2020-12-21 09:55

    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 };
    }
    

提交回复
热议问题