gpt4 book ai didi

c# - 可枚举或列表的属性

转载 作者:行者123 更新时间:2023-11-30 15:49:04 25 4
gpt4 key购买 nike

我正在研究 LINQ 和相关主题,并且想知道以下内容。

我有两种获取斐波那契数列的方法。我开始于:

public static IEnumerable<int> Fibonacci
{
get
{
int i = 0;
int j = 1;
int temp = 0;

while (true)
{
yield return i;

temp = i;
i = j;
j = temp + i;
}
}
}

但这让我开始思考,为什么我会选择这个而不是:

public static IList<int> Fibonacci(long to)
{
IList<int> fibList = new List<int>();
int i = 0;
int j = 1;
int temp, index = 0;

while (index < to)
{
fibList.Add(i);

temp = i;
i = j;
j = temp + i;

index++;
}
return fibList;
}

IList 也是一个 Enumerable + 我可能想向它添加一些参数化。我并不是真的在寻找优化或诸如使用 之类的东西,因为数字变大的速度很快,这只是一个简单的例子。只是一些支持和反对每种方法的论点。为什么以及何时应该使用哪种方法?

最佳答案

两者之间的一个重要区别是,对于第二个版本,您必须提前知道何时要停止,但在第一个版本中,您可以开始迭代,然后再决定何时停止。您不必事先知道。

您也不必在第一个版本中立即将整个列表存储在内存中。您可以以流方式处理数据。

第二个的优点是返回列表允许您索引到数组而不是从头开始一个一个地处理元素。如果您确实知道需要多少个元素,并且您知道该列表足够小以适合内存,则可以使用第二个版本。

请注意,这些差异与您使用的是属性还是函数调用无关。您可以将第一个重写为不带参数的函数调用。

如果您只有第一个版本可用,您可以使用 Fibinocci().Take(20).ToList() 轻松模拟第二个版本。

关于c# - 可枚举或列表的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123657/

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