gpt4 book ai didi

c# - IEnumerable.Count() O(n)

转载 作者:太空狗 更新时间:2023-10-29 22:08:27 27 4
gpt4 key购买 nike

我只是偶然发现了这段代码,我想知道为什么 Count 在循环中完成。

  /// <summary>
/// find the first index in a sequence to satisfy a condition
/// </summary>
/// <typeparam name="T">type of elements in source</typeparam>
/// <param name="source">sequence of items</param>
/// <param name="predicate">condition of item to find</param>
/// <returns>the first index found, or -1 if not found</returns>
public static int FindIndex<T>(this IEnumerable<T> source, Predicate<T> predicate)
{
for (int i = 0; i < source.Count(); i++)
{
if (predicate(source.ElementAt(i))) return i;
}
return -1; // Not found
}

如果计数可以改变,我们不应该像这样:for (int i = source.Count() - 1; i >= 0; i--)

否则,我认为我们应该在循环开始之前计算计数,而不是每次都计算。

执行此操作的正确方法是什么?

最佳答案

为此编写手动代码的正确方法是丢掉所有垃圾并简单地使用 foreach 进行迭代:

public static int FindIndex<T>(this IEnumerable<T> source, Predicate<T> predicate) 
{
var index = 0;
foreach(var item in source) {
if(predicate(item)) {
return index;
}
++index;
}

return -1;
}

关于c# - IEnumerable.Count() O(n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389623/

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