Wie wäre es mit der Linq-Funktion ToDictionary:
%Vor% Ich habe ein Wörterbuch vom Typ <string, string>
und für einen bestimmten Fall muss ich eine umgekehrte Suche durchführen. Nehmen wir zum Beispiel an, dass ich diesen Eintrag <"SomeString", "ab">
habe und dass ich in "ab"
übergebe, dann möchte ich "SomeString"
zurückgeben.
Bevor ich eine foreach
-Schleife über jeden Eintrag im Wörterbuch beginne, habe ich mich gefragt, was der effizienteste Weg wäre, diese umgekehrte Suche durchzuführen?
Grundsätzlich können Sie LINQ
verwenden und die Key
wie folgt erhalten, ohne etwas umzukehren:
Wenn Sie Ihr Wörterbuch wirklich umkehren möchten, können Sie eine Erweiterungsmethode wie folgt verwenden:
%Vor%Dann kannst du es so benutzen:
%Vor% Hinweis: Wenn Sie doppelte Werte haben, fügt diese Methode das erste Value
hinzu und ignoriert die anderen.
1) Schlüssel sind einzigartig, Werte nicht. Für einen bestimmten Wert haben Sie eine Reihe von Schlüsseln.
2) Nach Schlüssel suchen ist O(log n)
. Iterieren mit foreach
oder LINQ ist O(n)
.
Also,
Option A: Iterate mit LINQ, verwende O(n)
pro Anfrage, keinen zusätzlichen Speicher.
Option B: Behalten Sie Dictionary<ValueType, HashSet<KeyType>>
bei, geben Sie O(log n)
pro Anfrage aus, verwenden Sie O(n)
zusätzlichen Speicher. (Es gibt zwei Unteroptionen: Erstellen Sie dieses Wörterbuch vor einer Reihe von Suchvorgängen; behalten Sie es immer bei)
Tags und Links c#