如何计算每日总数?

时间:2012-06-16 18:20:57

标签: c# arrays list

我有这个代码及其工作,但我希望它返回dailyTotals列表中的四个值,目前它返回三个值...我似乎无法弄清楚如何使它返回dailyTotals有四个值。顺便说一下billTotalsdateList是相同的长度,目前为7,它们会增长。 billTotalsdateList将始终保持相同的长度

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和每个账单的存储日期。所以,一个日期可以有多个与之相关的账单。我想要做的是抓住一个月的数据并总结每一天的总数。所以我在while循环中使用的逻辑应该总结总计,而日期是相同的......我希望这使得场景更清晰。 :)

1 个答案:

答案 0 :(得分: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而不是创建一个单独的类,尽管它对类更具可读性。