私はこの比較をより速くするための助けをしたいと思います(下記のサンプル)。サンプルは配列内の各値を取り、比較変数に1時間を付けます。一致する値がない場合、値は2番目の配列に追加されます(後で連結されます)。日付比較タスクのためのより良いアルゴリズム
if (ticks.TypeOf == Period.Hour)
while (compareAt <= endAt)
{
if (range.Where(d => d.time.AddMinutes(-d.time.Minute) == compareAt).Count() < 1)
gaps.Add(new SomeValue() {
...some dummy values.. });
compareAt = compareAt.AddTicks(ticks.Ticks);
}
時間が過ぎてもこの実行は多すぎます。たいていの場合、この配列には365 * 24 = 8760
の値があります。将来的には、月に分/秒(60*24*31=44640
)となります。つまり、は使用できません。です。
アレイが最も頻繁に完了した場合(空白/空きスロットがないことを意味します)、簡単にif (range.Count() == (hours/day * days))
をバイパスすることができます。しかし、その日は今日ではありません。
どうすればより効果的に解決できますか?
1つの例:配列内の値が7800の場合、約950が欠けています。しかし、ギャップ・エンディングだけを見つけて欠損値を作成することはできますか?これは、o表記法が値の量ではなく、ギャップの量に依存するようになります。
他の歓迎の答えはほんの一層効果的なループです。
[編集] 申し訳ありませんが、英語が苦手です。
私はあなたの質問を2回読みましたが、私はあなたがここで何を求めているのかまだ分かりません。 "配列の空白"は、配列の空のスロットについて話していますか?または間隔?もっと理にかなっているように質問を書き直してください。 –
申し訳ありませんが、あなたがしたいことを理解できません。 – Jodrell
@Lasse Gapsは空のスロットを意味します!英語のために申し訳ありません。時間は '20110101 00:00 - 20110601 23:00'からですが、' 20110303 14:00 20110304 04:00'との間に欠けている値があります – Independent