-1

我有一个循环,我的价值是

var val= (from entry in Data select (entry.Value)).ToList().First();

数据是Dictionary我暂时使用的,val是双精度类型的。所以我有

foreach(var v in val)
  if(v > 100){
  // here I wanna check if the difference between current and last value is greaterthan 10, to skip the setValue and exit the foreach loop. 

     a.setValue(v);

     }

现在,如果当前和上一个之间的差异超过 10,我不想设置该值。

我应该创建一个列表还是什么?

4

3 回答 3

1

你在寻找这样的东西吗?这会将先前的值存储在另一个变量中,然后与 v 的当前值进行比较。

decimal previousVal = 0;

foreach(var v in val)
{
    if(previousVal > 0)
    {
        if(Math.Abs(v - previousVal) > 10) 
        {
           // diff greater than 10
        }
    }
    a.setValue(v);
    previousVal = v;
}

编辑:

0只是表明这是否是循环的第一次迭代。如果0是一个潜在的值,你可以使用一个可以为空的小数来代替:

decimal ? previousVal = null;

foreach(var v in val)
{
    if(previousVal != null)
    {
        if(Math.Abs(v - previousVal) > 10) 
        {
           // diff greater than 10
        }
    }
    a.setValue(v);
    previousVal = v;
}
于 2013-06-25T13:54:17.707 回答
0

如果我正确理解您的情况,请考虑尝试以下操作:

//List<double> 
var list = (from entry in Data select (entry.Value)).ToList();

double previousValue = 0;
for (int i=0; i< list.Count; i++)
{
    var diff = list[i] - previousValue;
    if (diff <= 10)
        a.setValue(list[i]);

    previousValue = list[i];
}
于 2013-06-25T14:50:50.877 回答
0

您在寻找类似Enumerable.Zip的东西吗?

var numbers = new []{ 1, 2, 3, 40, 41 };

var differences = numbers.Skip(1).Zip(numbers, (prev, curr) => Math.Abs(prev - curr));

var result = numbers.TakeWhile((obj, index) => index == 0 || numbers[index - 1] <= 10);

// outputs:
// 1
// 2
// 3
// 40
于 2013-06-25T13:47:40.453 回答