Словарь поиска (O (1)) против Linq где

Что быстрее, и стоит ли жертвовать стандартом Linq для достижения скорости (при условии, что поиск в словаре действительно быстрее)? Итак, позвольте мне уточнить:

У меня есть следующее:

List<Product> products = GetProductList();

У меня есть необходимость искать товар по некоторому атрибуту, например, по серийному номеру. Я мог бы сначала создать словарь, а затем заполнить его следующим образом:

Dictionary<string, Product> dict = new Dictionary<string, Product>();
foreach(Product p in products)
{
    dict.Add(p.serial, p);
}

Когда пришло время найти продукт, воспользуйтесь O (1), предлагаемым поиском по словарю:

string some_serial = ...;
try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }

В качестве альтернативы, используя Linq:

Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();

Недостаток подход Dict, конечно, это требует больше места в памяти, больше коды, чтобы написать, менее элегантно, и т.д. (хотя большинство это спорно). Предположим, что это не фактор. Должен ли я принять первый подход?

В заключение я хотел бы подтвердить, действительно ли сложность подхода Linq выше O (n), и я не вижу, как он может быть лучше этого.

Ответы на вопрос(1)

Ваш ответ на вопрос