对于重叠的多个日期范围比较:如何有效地做到这一点? [英] Multiple Date range comparison for overlap: how to do it efficiently?

查看:157
本文介绍了对于重叠的多个日期范围比较:如何有效地做到这一点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要检查是否出现重叠在两个不同的dateranges, {启动1,END1} {START2,END2} 我正在检查:

To check for overlap in two different dateranges, {Start1, End1} and {Start2, End2} I am checking:

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

现在的问题是, <击>什么是比较重叠的好办法,如果我让我们觉得五dateranges?

The question is, what is a good way to compare overlaps if I had let's say five dateranges?.

<打击>检查,看看是否有任何人不互相重叠?

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

If I have multiple date ranges, how to find if any of these ranges are overlapping?

推荐答案

要找到,如果所有的重叠

To find if all are overlapping

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

以查找是否存在重叠

to find if any are overlapping

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

这篇关于对于重叠的多个日期范围比较:如何有效地做到这一点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆