Qu'est-ce qui est plus rapide et devrais-je sacrifier la norme Linq pour atteindre la vitesse (en supposant que la recherche de dictionnaire est vraiment plus rapide)? Alors laissez-moi élaborer:Recherche de dictionnaire (O (1)) vs Linq où
Je donne les résultats suivants:
List<Product> products = GetProductList();
J'ai besoin de chercher un produit basé sur un attribut, par exemple, le numéro de série. Je pourrais d'abord créer un dictionnaire, puis le remplir comme suit:
Dictionary<string, Product> dict = new Dictionary<string, Product>();
foreach(Product p in products)
{
dict.Add(p.serial, p);
}
Quand il est temps de trouver un produit, profiter de O (1) offert par le look-up Dictionnaire:
string some_serial = ...;
try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }
Sinon, LINQ:
Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();
l'inconvénient de l'approche Dict est bien sûr, cela nécessite plus d'espace dans la mémoire, plus de code à écrire, moins élégante, etc (même si la plupart de cela est discutable). Supposons que ce soit non-facteur. Devrais-je prendre la première approche? Pour conclure, je voudrais confirmer si la complexité de l'approche de Linq ci-dessus est bien O (n) et je ne vois pas comment cela pourrait être meilleur que cela.
Oui, j'ai oublié de tenir compte de la surcharge de l'ajout au dictionnaire. Merci. –
Mais que se passe-t-il si j'utilise le dictionnaire plusieurs fois (c'est-à-dire 100 fois), pas une seule fois? –