Ответ 1
Является ли производительность
ToList
/ToArray
операцией O (n), которая копируетIEnumerable
в новый массив /List?
Да. ToList
немного более эффективен, так как ему не нужно сначала обрезать внутренний буфер до нужной длины.
Если я вызвал метод расширения linq в списке, он имеет производительность O (1), если я вызываю ToList, но O (n), если вызывается ToArray (и наоборот, если мой исходный список был массивом)?
Нет. Для обоих вызовов всегда создается новая коллекция; что мелкая копия оригинальной коллекции. Более эффективно вызывать ToList
или ToArray
на любом ICollection<T>
, чем на простой IEnumerable<T>
, который не реализует ICollection<T>
, хотя, как и в случае с коллекцией, с начала известно, что длина начинается. (Это обнаружено во время выполнения, хотя вам не нужно беспокоиться о типе времени компиляции.)
Вероятно, для словаря есть O (n), правильно?
Предполагая, что хэш чувствителен, это O (N), да. В основном он создает новый словарь точно так, как вы, вероятно, ожидаете.
Возможно, вы захотите прочитать соответствующие записи в моей блоге блога Edulinq: