一尘不染

多个日期范围比较以进行重叠:如何有效地进行比较?

algorithm

要检查重叠,在两个不同的dateranges,{Start1, End1}{Start2, End2}我检查:

if ((Start1 <= End2) && (End1 >= Start2))
{
  //overlap exists
}

问题是, 如果让我说五个日期范围,比较重叠的最佳方法什么?

检查它们是否彼此不重叠?

如果我有多个日期范围,如何查找这些范围是否重叠?


阅读 312

收藏
2020-07-28

共1个答案

一尘不染

查找是否全部重叠

static bool Overlap(params Tuple<DateTime, DateTime>[] ranges)
{
    for (int i = 0; i < ranges.Length; i++)
    {
        for (int j = i + 1; j < ranges.Length; j++)
        {
            if (!(ranges[i].Item1 <= ranges[j].Item2 && ranges[i].Item2 >= ranges[j].Item1))
                return false;

        }
    }
    return true;
}

查找是否有重叠

static bool Overlap(params Tuple<DateTime, DateTime>[] ranges)
{
    for (int i = 0; i < ranges.Length; i++)
    {
        for (int j = i + 1; j < ranges.Length; j++)
        {
            if (ranges[i].Item1 <= ranges[j].Item2 && ranges[i].Item2 >= ranges[j].Item1)
                return true;

        }
    }
    return false;
}
2020-07-28