IEnumerable.Count() O(n)

Я только что наткнулся на этот фрагмент кода, мне было интересно, почему 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--)

В противном случае, я думаю, нам следует вычислять счетчик до начала цикла, а не каждый раз.

Какой способ будет правильным?

5
задан bevacqua 5 December 2011 в 17:52
поделиться