編集:重要なポイントを逃しました:.NET 2.0
次のようなタイプを単純にするために、ソートされていないアイテムのリストがある場合を考えてみましょう。
class TestClass
{
DateTime SomeTime;
decimal SomePrice;
// constructor
}
毎日の合計価格が累積されるレポートのような出力を作成する必要があります。項目ごとに 1 つの行があり、その後に適切な要約行が続きます。
次のテスト データを取得します。
List<TestClass> testList = new List<TestClass> {
new TestClass(new DateTime(2008,01,01), 12),
new TestClass(new DateTime(2007,01,01), 20),
new TestClass(new DateTime(2008,01,01), 18)
};
望ましい出力は次のようになります。
2007-01-01:
20
Total: 20
2008-01-01:
12
18
Total: 30
そのようなシナリオにアプローチする最善の方法は何ですか? このようなリストの場合、リストをソートできるように、TestClass の IComparable インターフェイスを実装します。
レポート自体を作成するには、次のようなものを使用できます (価格の累積、現在の日付の追跡などのタスクのためのメソッドがあると仮定しましょう):
for (int i=0;i<testList.Count;i++)
{
if (IsNewDate(testList[i]))
{
CreateSummaryLine();
ResetValuesForNewDate();
}
AddValues(testList[i]);
}
// a final summary line is needed to include the data for the last couple of items.
CreateSummaryLine();
これで問題なく動作しますが、2 番目の「CreateSummaryLines」に関する限り、私は奇妙な感覚を覚えます。
そのような状況をどのように処理しますか (特に、事前に分類された辞書などではなく、アイテムの List<> を操作する必要があるという事実を考慮して)?