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
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:
-
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
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).
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
TryGetValue
ya queval
Será asignadonull
(es decirdefault(string)
) si la clave no existe.– dlev
16 de junio de 2013 a las 7:02