¿Cuál sería la mejor estructura de datos de C# para usar una clave y tener dos valores extraídos?Diccionario de C#, 2 valores
Esencialmente necesito un Dictionary<string, string, string>
. ¿Hay algo como esto?
¿Cuál sería la mejor estructura de datos de C# para usar una clave y tener dos valores extraídos?Diccionario de C#, 2 valores
Esencialmente necesito un Dictionary<string, string, string>
. ¿Hay algo como esto?
Si está utilizando .NET 4, se puede usar
Dictionary<string, Tuple<string, string>>
Si usted no es, usted podría crear su propia Tuple
tipo que funciona de la misma manera :)
Alternativamente, si solo necesita esto en un lugar, puede crear su propio tipo que encapsule las dos cadenas cuidadosamente usando nombres apropiados. Por ejemplo:
public sealed class NameAndAddress
{
private readonly string name;
public string Name { get { return name; } }
private readonly string address;
public string Address { get { return address; } }
public NameAndAddress(string name, string address)
{
this.name = name;
this.address = address;
}
}
continuación, puede utilizar:
Dictionary<string, NameAndAddress>
que hace que sea muy claro lo que va a ser almacenado.
Puede implementar la igualdad, etc., si así lo desea. Personalmente me gustaría ver este tipo de cosas hace más fácil - los tipos anónimos casi hacerlo, pero entonces no puedo nombrarlos ...
class A {
public string X, Y;
}
Dictionary<string, A> data;
Crear una estructura que contiene sus valores y luego usar
Dictionary<string, MyStruct> dict = new Dictionary<string, MyStruct>();
puede utilizar un diccionario de KeyValuePairs
Dictionary<string,KeyValuePair<string,string>>
No me gusta esta idea, ya que aunque * hará * lo que quieras, es engañosa: ¿por qué la segunda cadena se ve como una clave para el tercero? –
Sí, tiene razón, pero en algunas situaciones esa es una solución rápida y no tan fea ... De todos modos, una implementación personalizada o el uso de Tuple es probablemente el mejor en general (pero Tuple solo está en .NET 4.0) – digEmAll
-1 Esto es muy engañoso. No hay lógica en lo que debería ser una clave y lo que debería ser un valor en KeyValuePair
Sí, hay exactly that. Puede almacenar sus dos valores en una clase o estructura. ¿O quieres algo más?
Haz una clase para mantener tu valor y convertirlo en un diccionario. Si la clase solo se utiliza en el contexto de una clase que contiene (por ejemplo, se utiliza para entregar una estructura de datos para una propiedad de clase), puede hacer que su clase sea una clase anidada privada.
Ooh tuple ....! –
Sellado, solo de lectura, propiedades, ... - no lo confundas;) – Danvil
Sellado, solo lectura, propiedades, ... - uno de los ejemplos inmutables más concisos que he visto. Pero, ¿qué hay de reemplazar a Equals y GetHashCode? :) –