Wenn eine Ausnahme keine Option ist, wählen Sie Nachschlagen
Wenn Sie versuchen, eine so effiziente Struktur wie eine zu erhalten, Dictionary
aber nicht sicher sind, dass die Eingabe keinen doppelten Schlüssel enthält, Lookup
ist dies sicherer.
Wie in einer anderen Antwort erwähnt, unterstützt es auch Nullschlüssel und gibt immer ein gültiges Ergebnis zurück, wenn es mit beliebigen Daten abgefragt wird, sodass es für unbekannte Eingaben widerstandsfähiger erscheint (weniger anfällig als Dictionary, Ausnahmen auszulösen).
Und es ist besonders wahr, wenn Sie es mit der System.Linq.Enumerable.ToDictionary
Funktion vergleichen:
// won't throw
new[] { 1, 1 }.ToLookup(x => x);
// System.ArgumentException: An item with the same key has already been added.
new[] { 1, 1 }.ToDictionary(x => x);
Die Alternative wäre, Ihren eigenen doppelten Schlüsselverwaltungscode in eine foreach
Schleife zu schreiben .
Leistungsüberlegungen, Wörterbuch: ein klarer Gewinner
Wenn Sie keine Liste benötigen und eine große Anzahl von Elementen verwalten Dictionary
möchten (oder sogar Ihre eigene maßgeschneiderte Struktur), ist dies effizienter:
Stopwatch stopwatch = new Stopwatch();
var list = new List<string>();
for (int i = 0; i < 5000000; ++i)
{
list.Add(i.ToString());
}
stopwatch.Start();
var lookup = list.ToLookup(x => x);
stopwatch.Stop();
Console.WriteLine("Creation: " + stopwatch.Elapsed);
// ... Same but for ToDictionary
var lookup = list.ToDictionary(x => x);
// ...
Da Lookup
für jeden Schlüssel eine Liste mit Elementen geführt werden muss, ist diese langsamer als das Wörterbuch (etwa dreimal langsamer für eine große Anzahl von Elementen).
Suchgeschwindigkeit: Erstellung: 00: 00: 01.5760444
Wörterbuchgeschwindigkeit: Erstellung: 00: 00: 00.4418833