2012-01-09 9 views
2

私はこれらの日付が毎日か毎月であるかどうかを知るために、DateオブジェクトのTreeSetが与えられた場合、何が最良の方法であるか疑問に思っています。毎日のセットには週末や祝日の日付は含まれないことに注意してください。毎月の日付のセットには月末の日付が入ります。日付のセットは数年にわたります。日付のコレクションが毎月または毎日であるかどうかを判断する最善の方法は何ですか?

私が現在考えることができる唯一の方法は、セットから最初の12の日付を取り出し、各日付の月を検査することです。月が連続して2回以上見つかった場合、これは日々の日の集合である可能性が高い。そうでなければ、それは毎月の日付のセットであると仮定することができます。

これはうまくいくはずですが(私はそれが欠けてしまうようなエッジケースは考えられません)、より洗練されたソリューションがあるのだろうかと思っていました。私は月と年に基づいてコンパレータを使用するデータ構造(ツリー?)のいくつかの並べ替えを想像するでしょう。次に、このコレクションのサブツリーに複数のノードが含まれていた場合、それらを日々の日付とみなすことができます。この方法で余分なコードが妥当かどうか、あるいはより良い解決策があるかどうかはわかりません。あなたが私に与えることができるお手伝いをありがとう。

+2

作成時にあなたを識別できない原因は何ですか? – Viruzzo

+0

これは既存の機能の更新版であり、このためにコードの多くを変更するチャンスが実際にはありません。また、当初の日付はプログラムの外部のソースからのものです。 – Paul

答えて

1

私が現在考えることができる唯一の方法は、セットから最初の12の日付を取り出し、各日付の月を検査することです。月が連続して2回以上見つかった場合、これは日々の日の集合である可能性が高い。そうでなければ、それは毎月の日付のセットであると仮定することができます。

これは必ずしも機能しません。

セット内の各日付をチェックして、日付が週の日で、月末の日付であるかどうかを確認する必要があります。またはその両方!あなたは月末日ではない、またはその逆が、守備のプログラムは、それらのすべてをチェックする週日間を見つけたときにあなたが停止する可能性が

、場合にあなたが悪い与えられてきました入力。

コレクションがTreeSetであるため、パフォーマンス上のメリットはありません。

+0

迅速な対応に感謝します。私はそれを見落として信じられない!だから、私は、あなたが言うように、月がどこに転がっているのかを週末と月末を考慮して連続する日付があるかどうかを判断することだと思います。私は、他の理由で1日分のデータが失われる可能性もあると考えています(これはシステム外の自動化されたソースからのものです)。これはちょっとちょっと面白い! – Paul

+0

このデータが制御できないソースからのデータで、データの品質に疑問がある場合は、**不良データのチェックについて**徹底する必要があります。とにかく徹底的なパフォーマンスコストはおそらく無関係です。コード "優雅さ"は贅沢になります。シンプリシティは一般的にお金のためのより良い価値です。 –

+0

真。私はそれを念頭に置いておきます、感謝します。私はそうするために十分な評判のポイントを得たときに答えをアップにします。 – Paul

関連する問題