C# MoreLinq';s Scan和For循环返回不同的结果
我需要使用以下公式从C# MoreLinq';s Scan和For循环返回不同的结果,c#,linq,morelinq,C#,Linq,Morelinq,我需要使用以下公式从输入计算输出: Output(i) = inputs(i) * factor + outputs(i - 1) * (1 - factor) 我使用for循环和Morelink的Scan扩展实现了这一点: Int32 p = 5; Decimal factor = (Decimal) 2 / (p + 1); List<Decimal?> inputs = Enumerable.Range(1, 40).Select(x => (Decimal?)x)
输入计算输出
:
Output(i) = inputs(i) * factor + outputs(i - 1) * (1 - factor)
我使用for
循环和Morelink的Scan
扩展实现了这一点:
Int32 p = 5;
Decimal factor = (Decimal) 2 / (p + 1);
List<Decimal?> inputs = Enumerable.Range(1, 40).Select(x => (Decimal?)x).ToList();
// Using Scan extension
List<Decimal?> outputs1 = inputs.Scan((x, y) => x * factor + (y * (1 - factor)) ?? 0).ToList();
// Using for loop
List<Decimal?> outputs2 = new List<Decimal?> { inputs[0] };
for (int i = 1; i < inputs.Count(); i++)
outputs2.Add(inputs[i] * factor + (outputs2[i - 1] * (1 - factor)) ?? 0);
int32p=5;
十进制系数=(十进制)2/(p+1);
List inputs=Enumerable.Range(1,40)。选择(x=>(十进制?)x.ToList();
//使用扫描扩展
列表输出1=输入。扫描((x,y)=>x*因子+(y*(1-因子))??0)。ToList();
//用于循环
List outputs2=新列表{inputs[0]};
对于(int i=1;i
然而,我得到了不同的结果。我错过了什么
我是否错误地使用了Scan
?您以错误的顺序解释了转换
函数的参数(查看以了解如何调用转换
)。将代码更改为:
inputs.Scan((x, y) => y * factor + x * (1 - factor) ?? 0).ToList()
x
是聚合器,即上一个值,y是当前值。您以错误的顺序解释了转换
函数的参数(请查看以了解如何调用转换
)。将代码更改为:
inputs.Scan((x, y) => y * factor + x * (1 - factor) ?? 0).ToList()
x
是聚合器,即前一个值,y是当前值。什么是因子
?@juharr怎么会这样?我看到输出2[0]
已初始化并用于计算。(虽然输入与输入之间存在差异。)@juharr我跳过了第一个值,因为第一次计算不可能得到输出(I-1)@zaggler刚刚添加了缺少的值code@GuruStron不,把它复制到这里的时候是打字错误。刚刚更正了问题。因子是什么?@juharr怎么回事?我看到输出2[0]
已初始化并用于计算。(虽然输入与输入之间存在差异。)@juharr我跳过了第一个值,因为第一次计算不可能得到输出(I-1)@zaggler刚刚添加了缺少的值code@GuruStron不,把它复制到这里的时候是打字错误。刚刚纠正了这个问题。