Что происходит быстрее, и я должен пожертвовать стандартом Linq для достижения скорости (при условии, что поиск словаря действительно быстрее)? Итак, позвольте мне уточнить:Словарь Lookup (O (1)) vs 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), и я не вижу, как это может быть лучше.
Да, я забыл рассказать о накладных расходах на добавление в словарь. Благодарю. –
Но что, если я использую словарь много раз (т. Е. 100 раз), а не один раз? –