1. ホーム
  2. c#

[解決済み] 重複期間を検出するアルゴリズム【重複あり

2022-03-18 04:51:19

質問

2つの時間帯が重なっているかどうかを検出しなければならない。
各期間には、開始日と終了日があります。
最初の期間(A)が他の期間(B/C)と重なっているかどうかを検出する必要があります。
私の場合、Bの開始とAの終了が同じなら、重なっていない(逆も同様)。
以下のようなケースを発見しました。

だから、実はこんな風にやっているんです。

tStartA < tStartB && tStartB < tEndA //For case 1
OR
tStartA < tEndB && tEndB <= tEndA //For case 2
OR
tStartB < tStartA  && tEndB > tEndA //For case 3

(ケース4は、ケース1またはケース2のいずれかに該当します。)

それは 動作 しかし、あまり効率的ではないようです。

そこで、まず、この(期間)をモデル化できるC#の既存のクラスはあるのでしょうか?

第二に、C#のコード(例:Ctrl+C)は既に存在するのでしょうか? DateTime クラス)で処理することができますか?

第三に、もし「いいえ」の場合、この比較を最も高速に行うには、どのようなアプローチが考えられますか?

解決方法は?

2つの期間が重なっているかどうかの簡単なチェック。

bool overlap = a.start < b.end && b.start < a.end;

またはコード内で

bool overlap = tStartA < tEndB && tStartB < tEndA;

(使用 <= の代わりに < もし、ちょうど触れ合う2つのピリオドが重なり合うと言いたいという気持ちが変わったら)