Viniendo de un mundo Java a C # uno, ¿hay un equivalente de HashMap? Si no, ¿qué recomendarías?
                326
            
  
              
        DictionaryEs probablemente el más cercano. System.Collections.Generic.Dictionaryimplementa la System.Collections.Generic.IDictionaryinterfaz (que es similar a la Mapinterfaz de Java ).
Algunas diferencias notables que debe tener en cuenta:
puty getpara configurar / obtener elementos
myMap.put(key, value)MyObject value = myMap.get(key)[]indexación para configurar / obtener elementos
myDictionary[key] = valueMyObject value = myDictionary[key]null llaves
HashMappermite claves nulasDictionaryarroja un ArgumentNullExceptionsi intentas agregar una clave nulaHashMapreemplazará el valor existente con el nuevo.Dictionaryreemplazará el valor existente con el nuevo si usa []indexación. Si usa el Addmétodo, en su lugar arrojará un ArgumentException.HashMapdevolverá nulo.Dictionarylanzará un KeyNotFoundException. Puede usar el TryGetValuemétodo en lugar de la []indexación para evitar esto:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }Dictionary's tiene un ContainsKeymétodo que puede ayudar a lidiar con los dos problemas anteriores.
Dictionaryarroja excepciones al agregar una clave duplicada.if (!myDictionary.TryGetValue(key, value))necesita unoutpara el segundo argumento. Entoncesif (!myDictionary.TryGetValue(key, out value))Desde C # equivalente a Java HashMap
Necesitaba un diccionario que aceptara una clave "nula", pero parece que no hay una nativa, así que he escrito la mía. Es muy simple, en realidad. Heredé de Dictionary, agregué un campo privado para contener el valor de la clave "nula" y luego sobrescribí el indexador. Dice así :
Espero que esto ayude a alguien en el futuro.
==========
Lo modifiqué a este formato
fuente
Déjame ayudarte a entenderlo con un ejemplo del "algoritmo de codaddict"
' Diccionario en C #' es ' Hashmap en Java' en universo paralelo.
Algunas implementaciones son diferentes. Vea el siguiente ejemplo para comprender mejor.
Declarando Java HashMap:
Declarando Diccionario C #:
Obtener un valor de una ubicación:
Establecer un valor en la ubicación:
Se puede observar un ejemplo general desde abajo del algoritmo de Codaddict.
Algoritmo de codaddict en Java:
Algoritmo de Codaddict en C #
fuente
Consulte la documentación en MSDN para la clase Hashtable .
Además, tenga en cuenta que esto no es seguro para subprocesos.
fuente
Dictionary<TKey, TValue>es preferible, debido a la verificación del tipo de tiempo de compilación y porque no requiere el encajonamiento de los tipos de valor.Use Dictionary: usa hashtable pero es seguro para escribir.
Además, su código Java para
se codificará mejor en C # de esta manera:
De esta manera, puede determinar la necesidad de la variable "a" dentro de un bloque y aún se puede acceder fuera del bloque si la necesita más adelante.
fuente
la respuesta es
eche un vistazo a mi función, su simple complemento utiliza las funciones miembro más importantes dentro del Diccionario
esta función devuelve falso si la lista contiene elementos duplicados
fuente
Solo quería dar mis dos centavos.
Esto está de acuerdo con la respuesta de @Powerlord.
Pone "nulo" en lugar de cadenas nulas .
fuente