Что быстрее, и стоит ли жертвовать стандартом 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), и я не вижу, как он может быть лучше этого.