Wie man ein Wörterbuch Reverse Lookup macht

11

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?

    
frenchie 23.03.2014, 19:08
quelle

4 Antworten

20

Grundsätzlich können Sie LINQ verwenden und die Key wie folgt erhalten, ohne etwas umzukehren:

%Vor%

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.

    
Selman Genç 23.03.2014, 19:12
quelle
12

Verwenden Sie die Funktion Linq ToDictionary :

%Vor%

Sie können unten sehen, dass es funktioniert, wie in Linqpad getestet:

%Vor%

    
Ismail Hawayel 24.11.2015 16:33
quelle
1

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)

    
bohdan_trotsenko 23.03.2014 19:33
quelle
0

Wie wäre es mit der Linq-Funktion ToDictionary:

%Vor%     
Charlie 03.11.2016 21:04
quelle

Tags und Links