-3

私はこのコードとその動作を持っていますがdailyTotals、4つの値でリストを返したいのですが、現時点では3つの値で返されています... dailyTotals4つの値で返す方法がわかりません。ところで、billTotalsdateListは現在 7 である同じ長さであり、成長します。billTotalsそしてdateList常に同じ長さのままです

List<double> dailyTotals = new List<double>();

        string dateValue = "";
        double oneDayTotal = 0;
        int n = 0;

        for (int i = 0; i < billTotals.Count; i += n)
        {
            dateValue = dateList[i];
            oneDayTotal = 0;

            while (dateValue == dateList[n])
            {
                oneDayTotal += billTotals[n];

                n++;
            }

            dailyTotals.Add(oneDayTotal);
        }

        return dailyTotals;

[編集]: 申し訳ありませんが、これを前に書くべきでした:/ データベースには、billTotals と各請求書の日付が保存されています。そのため、1 つの日付に複数の請求書を関連付けることができます。私がやろうとしているのは、1 か月のデータを取得して、毎日の合計を合計することです。そのため、while ループで使用したロジックは、日付が同じである間に合計を合計することになっています。これにより、シナリオがより明確になることを願っています。:)

4

1 に答える 1

2

n をリセットすることはないため、i をますます大きくして、いくつかの数値をスキップします。

n = 0ループ内に設定する必要があります。

int n = 0;
for (int i = 0; i < billTotals.Count; i += n)
{
    dateValue = dateList[i];
    oneDayTotal = 0;

    n = 0;  // This counts the number of equal dates.
    while (i + n < dateList.Length && dateValue == dateList[i + n])
    {
        oneDayTotal += billTotals[i + n];
        n++;
    }

    dailyTotals.Add(oneDayTotal);
}

return dailyTotals;

コードを完全に書き直して単純化し、ループ変数をインクリメントするこの奇妙な方法を回避することもできます。日付と合計の両方を保持するオブジェクトの配列を作成することをお勧めします。そうすれば、LINQ を使用して複雑なループなしで問題を解決できます。

var dailyTotals = datesAndTotals
    .GroupBy(x => x.Date)
    .Select(g => g.Sum(x => x.BillTotal))
    .ToList();

Zipクラスを使用すると読みやすくなりますが、別のクラスを作成する代わりに使用することもできます。

于 2012-06-16T18:25:56.713 に答える