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不,把它复制到这里的时候是打字错误。刚刚纠正了这个问题。