2016-04-14 5 views
0

私の検索を通して、2つの時間範囲が重ならないようにするために、以下の単純なロジックが実際にうまく機能することがわかりました。複数の重複しない時間範囲を保証する良い方法

(StartA <= EndB) and (EndA >= StartB) 

しかし、多くの時間範囲を使用する必要がある場合、私の現在のアプローチでは煩雑になりがちです。 If文などがたくさんあります。

だから、よりよいアプローチは何ですか?私は15分間隔の '時間'に対応する配列を埋めて、新しい時間範囲が追加されたときにそれらの配列の場所が「占有」されているかどうかをチェックすることを考えました。

これはjavascriptを使用するので、配列が最も適しているか軽いかはわかりません。

答えて

1

簡単な方法は、日付を配列に格納し、開始日でソートし、日付が重複していないかどうかを確認することです。ここにサンプルがあります:

var dates = []; 
var addDate = function(start, end){ 
    dates.push({start: start, end: end}); 
}; 
var datesOverlap = function(){ 
    var i; 
    dates.sort(function(a, b){ return a.start-b.start;}); 
    for(i=0; i<dates.length-1; i++){ 
    if(dates[i].end >= dates[i+1].start){ 
     return true; // dates overlap 
    } 
    } 
    return false; // no dates overlap 
}; 

あなたはaddDate機能を確認したいすべての日付を追加します。次に、datesOverlap関数を呼び出して、日付が重複していないかどうかを確認します。

+0

本当に軽量のソリューションのようにも見えます、ありがとう! – Burninrock24

関連する問題