2016-04-07 14 views
0

したがって、StartTimeとDurationの両方のメンバー変数を持ついくつかのオブジェクトで構成される配列があります。 startTime変数は "14:20"の形式の文字列で、Duration変数は分数を表す数値です。オブジェクトの配列の要素を比較する最も良い方法

あなたは、配列を通過して重複する要素を組み合わせるための最良のロジックをお勧めしますか?例えば、配列が2つのオブジェクトを有し、第1のものがstartTimeが "00:00" & durationが60であり、第2のオブジェクトがstartTimeが "08:00" & durationが120であるものは、第2のオブジェクトが「00:30」の開始時間および120の持続時間を有する場合、2つは、「00:00」の開始時間および150の継続時間を有する1つのオブジェクトに結合される。

I 2つのブロックが結合された場合の処理​​方法を理解することができないため、しばらくの間、この一般的なロジックに固執していましたが、新しい結合ブロックは処理する必要がある新しいオーバーラップを作成します。私はちょうどこの間違って考えていますか?通常、私はこの種のものにはいいが、真剣にここで苦労している。

+0

をまた、イムは、この問題を解決し、まったくコードを提供するためにあなたを求めていない - ちょうどあなたが使用するアプローチ/ロジック上の一般的なガイダンスのために。ありがとう。 –

+0

回答なし - しかし示唆 - すべての時間を真夜中からの分の値に変換します(つまり、1時間の1AMイベントは開始時間60、終了時間は120になります)。次に、次の開始時刻<120、継続時間60の場合は、次のイベント期間を最初の期間と組み合わせると、60の開始時刻と120の期間の1つのイベントが発生します。要素を押し込むための配列) – gavgrif

+0

なぜこのようにしたいのか、より多くのコンテキストを与えることができますか? – FirstLegion

答えて

0

私は2本の木、一つのStartTimeによって索引付けおよび他の終了時間(のStartTime +時間)によってインデックス付けを作成することによってこれを行うであろう。両方のツリーで重なった要素を検索します。検索が完了すると、見つかった要素は両方のツリーから削除され、単一の新しい要素(StartTime = minStartTime(searchResult)、EndTime = maxEndTime(searchResult))が両方のツリーに挿入されます。

少し余分なストレージを使用しますが、これは重複の問題を些細なものにしていると思います。

(ツリーの実装では、練習として残し:)

+0

私はこれが答えだと思います!私が投稿したフィドルの私のロジックは、何か違うことをして、これよりも多くのコードを取っています。 –

+0

@マークキーンあなたがそれが答えだと思うなら、それを受け入れるべきです:) – Tibrogargan

0

@gavgrif ...

これらの行に沿って何かをお勧めします。

  1. 深夜から数分で(午後2時20分 - > 188)[「スタート」]新しい配列フィールドを作成するにマージする項目の重複を探して、配列を
  2. 「スタート」フィールドによってソート配列
  3. ループセグメント。この新しい項目の開始がセグメントの終了よりも大きくないことが重複している場合。

PHPの例は:

$segment = array('start' => -1, 'end' => -1); // force new segment on init 
$segments = array(); 
foreach ($items as $item) { 
    if ($item['start'] > $segment['end']) { 

     // add current segment (ignore initial fake segment) to segments 
     if ($segment['start'] > -1) { 
      // close out current segment 
      $segments[] = $segment;     
     } 

     // start new segment 
     $segment = $item; 

    } else { 

     // increment segment end if its later than current segment end 
     $segment['end'] = max($segment['end'], $item['end']; 
    }   
} 

// close out final segment 
$segments[] = $segment; 
+0

OPがPHPをjavascriptに変換できるとしていますか? – RobG

+0

良い点。多分あなたは私の答えに基づいてjavascriptで答えることができ、私は私の答えを削除します。 – xeo

+0

私は、OPが何らかのコードを提供しているか、質問が数時間でうまくいきません。そして、私はおそらく* reduce *と* some *、または同様のものを使用します。サンプルの入力と出力もありません。 – RobG

関連する問題