C# 比较当前值和以前的值
我有一个循环,在这个循环中我得到我的值C# 比较当前值和以前的值,c#,C#,我有一个循环,在这个循环中我得到我的值 var val= (from entry in Data select (entry.Value)).ToList().First(); 数据是我暂时使用的字典,val是double类型。 所以我有 foreach(var v in val) if(v > 100){ // here I wanna check if the difference between current and last value is greaterthan 1
var val= (from entry in Data select (entry.Value)).ToList().First();
数据是我暂时使用的字典
,val
是double类型。
所以我有
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,我不想设置该值
我应该创建一个列表还是什么的?与您正在寻找的类似吗
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
var number=new[]{1,2,3,40,41};
var差异=数字.Skip(1).Zip(数字,(prev,curr)=>Math.Abs(prev-curr));
var result=numbers.TakeWhile((obj,index)=>index==0 | | numbers[index-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;
}
如果我能正确地理解你的情况,请考虑一下:
//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];
}
//列表
var list=(从数据选择中的条目(entry.Value)).ToList();
双前值=0;
for(int i=0;i 如果(diff第一次迭代,val=10,2次11,12,当其为21时,我想知道:P@justanidiot很抱歉,您的问题非常不清楚。请您将其展开以更具体地说明您想要什么?我在运行时读取Val,并为每次读取的值添加它。我想停止添加,如果最后一个Val值相差超过10,我想停止添加是,但是c仅比较最后两个值,如果您看到上面更清晰的内容,现在我编辑了解决方案,因此前面的值方法看起来更吸引人,只是我不能使用上面的答案,我需要一分钟后的评论中的相反内容。您说:“val
是double
”,您说“foreach(var v in val)”?如何在double上迭代???什么是'a'变量?抱歉,这是一个选项,不想麻烦,它只是一个可为null的自定义类型,所以我需要foreach,但无论如何,我会在每个变量之前循环value@justanidiot,请改进您的问题。请给出一个代码的工作示例,而不仅仅是随机出现错误的行。我想我知道您的想法你想要,但我不知道哪个字是什么。你不能用double类型循环。但是他们,我感兴趣,否则,就像我想在条件小于10时做些什么,所以现在在这种情况下,第一次迭代只有在我大于0时才有效,我想加上第一次迭代,第二次,第三次直到数学。Abs(v-previousVal)>10但在这种情况下,如果为null,我不会输入if子句,我需要这样做,因为像这样我会错过第一个值,第一个iteration@justanidiot第一次迭代的值将存储在v中,并且没有以前的值可与之比较,因此我们已经知道差值不大于10。它将与第二次迭代进行比较第二次迭代时的值。但当它更大时,我想停止读取v并退出foreach,因为我不再对值感兴趣,但我只对两个值感兴趣,列表太多了,对吗?