Jak uzyskać klucz słownika według wartości w języku C #?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Chcę coś takiego:
getByValueKey(string value);
getByValueKey("one")
musi być powrót "1"
.
Jak najlepiej to zrobić? Może HashTable, SortedLists?
c#
dictionary
loviji
źródło
źródło
Odpowiedzi:
Wartości niekoniecznie muszą być unikalne, więc musisz sprawdzić. Możesz zrobić coś takiego:
Jeśli wartości są unikalne i są wstawiane rzadziej niż czytane, utwórz słownik odwrotny, w którym wartości są kluczami, a klucze są wartościami.
źródło
KeyValuePair<Tkey,Tvalue>
jest strukturą, więc jest to typ wartości, nigdy nie może byćnull
.FirstOrDefault
zwróci instancję, w której wszystkie pola są inicjowane z ich wartością domyślną (jaknull
dla łańcuchów lub 0 dla liczb całkowitych). Więc nie dostaniesz wyjątku. Ale nie wiesz również, czy znalazłeś wartość, więc ta odpowiedź nie obejmuje przypadku, w którym wartość nie istnieje.Możesz to zrobić:
KeyValuePair<TKey, TValue>
w słowniku (co będzie dużym hitem wydajności, jeśli masz kilka pozycji w słowniku)Użyj metody 1, jeśli wydajność nie jest brana pod uwagę, użyj metody 2, jeśli pamięć nie jest brana pod uwagę.
Ponadto wszystkie klucze muszą być unikalne, ale wartości nie muszą być unikalne. Możesz mieć więcej niż jeden klucz o określonej wartości.
Czy jest jakiś powód, dla którego nie można odwrócić relacji klucz-wartość?
źródło
Byłem w sytuacji, gdy wiązanie Linq nie było dostępne i musiałem wyraźnie rozszerzyć lambda. Zaowocowało to prostą funkcją:
Nazwij to w następujący sposób:
Działa na .NET 2.0 i innych ograniczonych środowiskach.
źródło
może coś takiego:
źródło
Utworzyłem klasę podwójnego wyszukiwania:
źródło
Values.ToList () konwertuje wartości ze słownika na listę obiektów. IndexOf („one”) przeszukuje twoją nową Listę szukając „one” i zwraca Indeks, który pasowałby do indeksu pary Klucz / Wartość w słowniku.
Ta metoda nie dba o klucze słownika, po prostu zwraca indeks wartości, której szukasz.
Pamiętaj, że w twoim słowniku może znajdować się więcej niż jedna „jedna” wartość. I dlatego nie ma metody „zdobądź klucz”.
źródło
Poniższy kod działa tylko wtedy, gdy zawiera unikalne dane wartości
źródło
Mam na to bardzo prosty sposób. Wyszło mi to idealnie.
źródło