Java Map equivalente en C#

2 minutos de lectura

Estoy tratando de mantener una lista de elementos en una colección con una clave de mi elección. En Java, simplemente usaría Map de la siguiente manera:

class Test {
  Map<Integer,String> entities;

  public String getEntity(Integer code) {
    return this.entities.get(code);
  }
}

¿Hay una forma equivalente de hacer esto en C#?
System.Collections.Generic.Hashset no usa hash y no puedo definir una clave de tipo personalizado
System.Collections.Hashtable no es una clase genérica
System.Collections.Generic.Dictionary no tiene un get(Key) método

avatar de usuario
boj

Puede indexar Diccionario, no necesitaba ‘obtener’.

Dictionary<string,string> example = new Dictionary<string,string>();
...
example.Add("hello","world");
...
Console.Writeline(example["hello"]);

Una forma eficiente de probar/obtener valores es TryGetValue (gracias a Earwicker):

if (otherExample.TryGetValue("key", out value))
{
    otherExample["key"] = value + 1;
}

Con este método, puede obtener valores de forma rápida y sin excepciones (si está presente).

Recursos:

Diccionario-Teclas

Prueba Obtener valor

  • Es posible que desee mencionar TryGetValue también.

    – Daniel Earwicker

    26 de marzo de 2009 a las 23:34

  • Lo es O(lg(n)) como Java uno? Yo creo que no

    usuario586399

    3 de marzo de 2014 a las 11:02

  • Las lecturas de @Desolator son O(1), consulte la sección Comentarios de la página de MSDN de Dictionary

    – canton7

    26/09/2014 a las 10:35

avatar de usuario
dave

Dictionary es el equivalente. Si bien no tiene un método Get(…), tiene una propiedad indexada llamada Item a la que puede acceder en C# directamente usando la notación de índice:

class Test {
  Dictionary<int,String> entities;

  public String getEntity(int code) {
    return this.entities[code];
  }
}

Si desea usar un tipo de clave personalizado, debe considerar implementar IEquatable y anular Equals(object) y GetHashCode() a menos que la igualdad predeterminada (referencia o estructura) sea suficiente para determinar la igualdad de claves. También debe hacer que su tipo de clave sea inmutable para evitar que sucedan cosas extrañas si una clave se muta después de haberla insertado en un diccionario (por ejemplo, porque la mutación provocó que su código hash cambiara).

avatar de usuario
LucasH

class Test
{
    Dictionary<int, string> entities;

    public string GetEntity(int code)
    {
        // java's get method returns null when the key has no mapping
        // so we'll do the same

        string val;
        if (entities.TryGetValue(code, out val))
            return val;
        else
            return null;
    }
}

  • Esta respuesta es ridículamente antigua, pero puede devolver valor independientemente del resultado de TryGetValueya que val Será asignado null (es decir default(string)) si la clave no existe.

    – dlev

    16 de junio de 2013 a las 7:02

¿Ha sido útil esta solución?