gpt4 book ai didi

c# - 用 Linq 迭代

转载 作者:行者123 更新时间:2023-11-30 14:13:31 24 4
gpt4 key购买 nike

我正在尝试找到一种方法来从同一行中的 Linq 方法访问以前的值。

我希望能够在 Linq 中使用这种通用形式:

var values = Enumerable.Range( 1, 100 ).Select( i => i + [last result] );

但如果不使用多行 lambda 并将结果存储在其他地方,我找不到一种方法来做这样的事情。

所以我在 Linq 中能做的最好的斐波那契求和是:

List<int> calculated = new List<int>( new int[] { 1, 2 });
var fibonacci = Enumerable.Range(2, 10).Select(i =>
{
int result = calculated[i - 2] + calculated[i - 1];
calculated.Add(result);
return result; // and how could I just put the result in fibonacci?
}
);

这看起来很丑陋。我可以使用常规的 for 循环以更少的代码完成此操作。

for (int i = 2; i < 10; i++)
{
calculated.Add(calculated[i - 2] + calculated[i - 1]);
}

似乎如果我能找到一种方法来做到这一点,我就可以使用 Linq 进行大量线性规划并对大量迭代公式求和。

最佳答案

如果您正在寻找创建斐波那契数列生成器的方法,最好编写自己的生成器函数,而不是使用 Linq 扩展方法。像这样:

public static IEnumerable<int> Fibonacci()
{
int a = 1;
int b = 0;
int last;

for (;;) {
yield return a;

last = a;
a += b;
b = last;
}
}

然后您可以将 Linq 方法应用于此可枚举以获得您想要的结果(例如,尝试遍历 Fibonacci().Take(20))。

Linq 扩展方法并不能解决所有编程问题,我只能想象纯 LINQ 斐波那契数列生成器看起来会有多可怕。

关于c# - 用 Linq 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com