C#如何将列表数减去变量直到达到x <= 0?

时间:2016-01-14 03:45:17

标签: c#

这个程序试图将列表的内容减去变量'health',想象健康的值是一个对象中的生命力量,列表中的每个数字都是一个破坏性的力量,我试图得到health&lt; = 0的索引。例如,health - theOneList [0] = 2 - 1.1 = .9,因为.9!=&lt; = 0,继续减去。

    var wqat = 1.1;
    var rat = .2;
    var eat = .8;
    var baat = 1.2;

    var health = 2;


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

    theOneList.Add(wqat);
    theOneList.Add(rat);
    theOneList.Add(eat);
    theOneList.Add(baat);




    for (int i = 0; i < 4; i++)
    {
        test.Add(health - theOneList[i]);

        Console.WriteLine(test[i]);
    }

3 个答案:

答案 0 :(得分:2)

另一种简单的方法是使用Linq语句。

var heathRemaining = theOneList.TakeWhile(c=> (health-=c) >=0.0);

工作小提琴手Demo

答案 1 :(得分:0)

改为使用while循环:

int i = 0;
while(health > 0 && i < theOneList.length){
   // keep subtracting
   test.add(health - theOneList[i]);
   Console.WriteLine(test[i]);
   i++;
}

答案 2 :(得分:0)

您可以在for循环中使用简单条件执行此操作。

- (void)layoutSubviews {

    [super layoutSubviews];
}

首先,您并不想对迭代器上限值进行硬编码。在循环条件中使用int i = 0; for(i = 0; i < theoneList.Length && health > 0; i++) { health -= theOneList[i]; } Console.WriteLine(i); 会使您遍历整个列表。

这种方法的工作方式是它将从健康状况中减去列表中的值,直到健康状况不大于零。这将打破循环,留下使健康低于零的值的位置作为.Length的值。

此外,如果你关心的是你的列表中的值使健康状况达到0或更低,那么就不需要将健康值推回到列表中。