Przychodząc ze świata Java do C # 1, czy istnieje odpowiednik HashMap? Jeśli nie, co byś polecił?
325
Dictionary
jest prawdopodobnie najbliższy. System.Collections.Generic.Dictionary
implementuje System.Collections.Generic.IDictionary
interfejs (podobny do Map
interfejsu Java ).
Kilka istotnych różnic, o których powinieneś wiedzieć:
put
i get
do ustawiania / pobierania elementów
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
indeksowania do ustawiania / pobierania elementów
myDictionary[key] = value
MyObject value = myDictionary[key]
null
Klucze
HashMap
pozwala na klucze zeroweDictionary
rzuca, ArgumentNullException
jeśli spróbujesz dodać klucz zerowyHashMap
zastąpi istniejącą wartość nową.Dictionary
zastąpi istniejącą wartość nową, jeśli korzystasz z []
indeksowania. Jeśli użyjesz tej Add
metody, zamiast niej wyrzuci ArgumentException
.HashMap
zwróci null.Dictionary
rzuca KeyNotFoundException
. Możesz użyć TryGetValue
metody zamiast []
indeksowania, aby tego uniknąć:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
ma ContainsKey
metodę, która może pomóc w rozwiązaniu dwóch poprzednich problemów.
Dictionary
zgłasza wyjątki podczas dodawania duplikatu klucza.if (!myDictionary.TryGetValue(key, value))
potrzebujeout
drugiego argumentu. Więcif (!myDictionary.TryGetValue(key, out value))
Z języka C # odpowiadającego Java HashMap
Potrzebowałem Słownika, który akceptuje klucz „zerowy”, ale wydaje się, że nie ma natywnego, więc napisałem własny. W rzeczywistości jest to bardzo proste. Odziedziczyłem po Dictionary, dodałem prywatne pole do przechowywania wartości klucza „null”, a następnie zastąpiłem indeksator. To wygląda tak:
Mam nadzieję, że to pomoże komuś w przyszłości.
==========
Zmodyfikowałem go do tego formatu
źródło
Pozwól, że pomogę ci to zrozumieć na przykładzie „algorytmu codaddict”
„ Dictionary in C #” to „ Hashmap in Java” w równoległym wszechświecie.
Niektóre implementacje są różne. Zobacz poniższy przykład, aby lepiej zrozumieć.
Deklarowanie Java HashMap:
Deklarowanie słownika C #:
Uzyskiwanie wartości z lokalizacji:
Ustawienie wartości w lokalizacji:
Ogólny przykład można zaobserwować poniżej algorytmu Codaddict.
algorytm codaddict w Javie:
Algorytm Codaddict w C #
źródło
Sprawdź dokumentację MSDN dla klasy Hashtable .
Pamiętaj również, że nie jest to bezpieczne dla wątków.
źródło
Dictionary<TKey, TValue>
jest preferowane ze względu na sprawdzanie typu czasu kompilacji i ponieważ nie wymaga boksu typów wartości.Użyj słownika - używa tablicy mieszającej, ale jest bezpieczny dla typów.
Ponadto twój kod Java dla
najlepiej będzie kodować w C # w ten sposób:
W ten sposób możesz zawęzić zakres potrzeby zmiennej „a” wewnątrz bloku i jest ona nadal dostępna poza blokiem, jeśli będziesz jej potrzebować później.
źródło
odpowiedź to
spójrz na moją funkcję, jej proste dodawanie wykorzystuje najważniejsze funkcje składowe w Słowniku
ta funkcja zwraca false, jeśli lista zawiera elementy Duplikaty
źródło
Chciałem tylko dać dwa centy.
Jest to zgodne z odpowiedzią @Powerlord.
Ustawia „null” zamiast łańcuchów o wartości null .
źródło