Wie erhalte ich einen Wörterbuchschlüssel nach Wert in C #?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Ich möchte so etwas:
getByValueKey(string value);
getByValueKey("one")
muss zurückgegeben werden "1"
.
Was ist der beste Weg, dies zu tun? Vielleicht HashTable, SortedLists?
c#
dictionary
loviji
quelle
quelle
Antworten:
Werte müssen nicht unbedingt eindeutig sein, daher müssen Sie eine Suche durchführen. Sie können so etwas tun:
Wenn Werte eindeutig sind und weniger häufig als gelesen eingefügt werden, erstellen Sie ein inverses Wörterbuch, in dem Werte Schlüssel und Schlüssel Werte sind.
quelle
KeyValuePair<Tkey,Tvalue>
es sich um eine Struktur handelt, kann es sich also niemals um einen Werttyp handelnnull
.FirstOrDefault
gibt eine Instanz zurück, in der alle Felder mit ihrem Standardwert initialisiert werden (wienull
für Zeichenfolgen oder 0 für Ints). Sie werden also keine Ausnahme bekommen. Sie wissen aber auch nicht, ob Sie einen Wert gefunden haben, sodass diese Antwort nicht den Fall abdeckt, dass der Wert nicht vorhanden ist.Sie könnten das tun:
KeyValuePair<TKey, TValue>
Wörter im Wörterbuch (was ein beträchtlicher Leistungseinbruch ist, wenn Sie mehrere Einträge im Wörterbuch haben)Verwenden Sie Methode 1, wenn die Leistung keine Rolle spielt, und Methode 2, wenn der Speicher keine Rolle spielt.
Außerdem müssen alle Schlüssel eindeutig sein, aber die Werte müssen nicht eindeutig sein. Möglicherweise haben Sie mehr als einen Schlüssel mit dem angegebenen Wert.
Gibt es einen Grund, warum Sie die Schlüssel-Wert-Beziehung nicht umkehren können?
quelle
Ich befand mich in einer Situation, in der die Linq-Bindung nicht verfügbar war und Lambda explizit erweitern musste. Es ergab sich eine einfache Funktion:
Nennen Sie es wie folgt:
Funktioniert unter .NET 2.0 und in anderen eingeschränkten Umgebungen.
quelle
vielleicht so etwas:
quelle
Ich habe eine Double-Lookup-Klasse erstellt:
quelle
Values.ToList () konvertiert Ihre Wörterbuchwerte in eine Liste von Objekten. IndexOf ("one") durchsucht Ihre neue Liste nach "one" und gibt den Index zurück, der mit dem Index des Schlüssel / Wert-Paares im Wörterbuch übereinstimmt.
Diese Methode kümmert sich nicht um die Wörterbuchschlüssel, sondern gibt einfach den Index des gesuchten Werts zurück.
Beachten Sie, dass Ihr Wörterbuch möglicherweise mehr als einen "Eins" -Wert enthält. Und das ist der Grund, warum es keine "get key" -Methode gibt.
quelle
Der folgende Code funktioniert nur, wenn er eindeutige Wertdaten enthält
quelle
Ich habe einen sehr einfachen Weg, dies zu tun. Es hat perfekt für mich geklappt.
quelle