Was ist schneller und sollte ich den Linq-Standard opfern, um Geschwindigkeit zu erreichen (vorausgesetzt, Dictionary-Lookup ist wirklich schneller)? Also lassen Sie mich erarbeiten:Dictionary Lookup (O (1)) vs Linq wo
Ich habe folgendes:
List<Product> products = GetProductList();
ich eine Notwendigkeit für ein Produkt suchen auf einige Attribut basiert, beispielsweise die Seriennummer. Ich konnte zuerst ein Wörterbuch erstellen und dann es 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, nutzen Sie O (1) durch das Wörterbuch Look-up angeboten zu finden:
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 bei dem Dict Ansatz natürlich erfordert dies mehr Platz im Speicher, mehr Code, weniger elegant zu schreiben, usw. (obwohl die meisten dies fraglich sind). Angenommen, das ist kein Faktor. Soll ich den ersten Ansatz nehmen?
Abschließend möchte ich bestätigen, ob die Komplexität des obigen Linq-Ansatzes tatsächlich O (n) ist und ich nicht sehe, wie es besser sein kann.
Ja, ich habe vergessen, über den Overhead des Hinzufügens zum Wörterbuch nachzudenken. Vielen Dank. –
Aber was, wenn ich das Wörterbuch viele Male (d. H. 100 Mal) benutze, nicht nur einmal? –