Dictionary Lookup (O (1)) gegen Linq where

Was ist schneller und sollte ich den Linq-Standard opfern, um Geschwindigkeit zu erreichen (vorausgesetzt, die Suche im Wörterbuch ist wirklich schneller)? Lassen Sie mich also näher darauf eingehen:

Ich habe folgendes:

List<Product> products = GetProductList();

Ich muss nach einem Produkt suchen, das auf einem bestimmten Attribut basiert, z. B. der Seriennummer. Ich könnte zuerst ein Wörterbuch erstellen und es dann wie folgt füllen:

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

Wenn es Zeit ist, ein Produkt zu finden, nutzen Sie die Vorteile von O (1), die die Dictionary-Suche bietet:

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

Alternativ mit Linq:

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

Der Nachteil des Dict-Ansatzes ist natürlich, dass dies mehr Speicherplatz, mehr Code zum Schreiben, weniger elegant usw. erfordert (obwohl das meiste davon umstritten ist). Angenommen, das ist kein Faktor. Soll ich den ersten Ansatz wählen?

Abschließend möchte ich bestätigen, ob die Komplexität des obigen Linq-Ansatzes tatsächlich O (n) ist, und ich sehe nicht, wie es besser sein kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage