强制再循环一次?

时间:2017-05-12 10:52:06

标签: c#

int iterationMax = 1;
double actualMax = 0;
int A = 3;

List<double> tmp = new List<double> { 400, 0, -300, 400, 600 ,300, 400, 
                                      1200, 900, 400, 1200, 1500};
List<double> listMax = new List<double>();
for (int i = 0; i < tmp.Count; i++)
{
    if (iterationMax < A) // A == 3
    {
        if (tmp[i] > actualMax)
        {
            actualMax = tmp[i];
        }
        iterationMax++;
    }
    else
    {
        listMax.Add(actualMax);
        actualMax = 0;
        iterationMax = 1;
    }
}

Console.WriteLine("\nMaxs: ");
foreach (double max in listMax)
{
    Console.Write(max + ", ");
}

列出tmp hold = { 400,0,-300|400,600,300|400,1200,900|400,1200,1500}, 制作400, 600, 1200, 1200, 应该是400, 600, 1200, 1500。我不知道如何输入else语句将1500添加到列表中。

我只想从每3个元素中获得最大值。

4 个答案:

答案 0 :(得分:4)

当需要对收集进行操作时,使用Linq会好很多倍。

GroupBy中使用index/3,因为它是int,每个以下3项将有不同的key。然后为每个组选择最大值:

var items = new int[] { 400, 0, -300, 400, 600, 300, 400, 1200, 900 };

var results = items.Select((item, index) => new { item, index })
                   .GroupBy(item => item.index / 3)
                   .Select(group => group.Max(item => item.item));
//400, 600, 1200

答案 1 :(得分:1)

您的代码的快速修复将是:

var A = 3;

int iterationMax = 0;
double actualMax = 0;

List<double> tmp = new List<double> {400,0,-300,400,600,300,400,1200,900,400,1200,1500};
List<double> listMax = new List<double>();
for (int i = 0; i < tmp.Count; i++)
{
    if (iterationMax < A) // A == 3
    {
        if (tmp[i] > actualMax)
        {
            actualMax = tmp[i];
        }
        iterationMax++;
    }

    if (iterationMax == A)
    {
        listMax.Add(actualMax);
        actualMax = 0;
        iterationMax = 0;
    }
}

Console.WriteLine("\nMaxs: ");
foreach (double max in listMax)
{
    Console.Write(max + ", ");
}

正如其他人所说,从iterationMax开始0并将else变为if (iterationMax == A)

答案 2 :(得分:0)

在初始化和其他情况下将iterationMax设置为0应解决您的问题。

目前,您的if结构只会检查三个元素中的前两个元素。由于1500是元素#3,因此不会进行检查。

答案 3 :(得分:0)

问题是,当iterationMax达到3时,你没有对temp中的值做任何事情,那个循环就会丢失。

for (int i = 0; i < tmp.Count; i++)
{
    if (tmp[i] > actualMax)
    {
        actualMax = tmp[i];
    }
    iterationMax++;

    if (iterationMax > A)
    {
        listMax.Add(actualMax);
        actualMax = 0;
        iterationMax = 1;
    }
}