-3

我有这段代码及其工作,但我希望它返回dailyTotals具有四个值的列表,目前它正在返回三个值......我似乎无法弄清楚如何让它返回dailyTotals四个值。顺便说一句,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 和存储的每张账单的日期。因此,一个日期可以有多个与之关联的账单。我想要做的是获取一个月的数据并总结每一天的总数。所以我在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 回答