initialize - C#Diccionario con dos valores por clave?
return dictionary c# (11)
¿Esto no funciona para ti?
Dictionary<string, List<string>>
O podrías usar un Tuple y tener un diccionario de eso:
Dictionary<string, Tuple<string, bool>>
Tengo una situación en el código donde un Dictionary<string, string>
pareció la mejor idea: necesito una colección de estos objetos y necesito que sean accesibles a través de una clave única. Exactamente para qué es el concepto de diccionario, ¿verdad?
Bueno, los requisitos se han ampliado hasta el punto en que ahora necesito tener un bit adicional de información por clave (un valor booleano, si es curioso).
Entonces, me imagino expandir el concepto para crear una nueva estructura de datos con la cadena y el booleano, y que ahora sea un Dictionary<string, NewCustomObject>
.
Sin embargo, por solo un valor adicional como una bandera booleana, simplemente se siente como un exceso. Y, sin embargo, no conozco ningún objeto genérico parecido a un diccionario con dos valores por clave.
¿Acaso tener un diccionario de objetos personalizados es la mejor manera de hacerlo o hay algo más simple para este escenario?
¿Qué pasa con la clase de Lookup ?
Editar:
Después de leer la pregunta cuidadosamente piense que esta no es la mejor solución, pero sigue siendo una buena para el diccionario con algunos valores por una sola clave.
En .NET4, podría usar (sin marcar): Dictionary<string, Tuple<bool,string>>
En general, creo que te estás metiendo en el concepto de Tuples, algo así como Tuple<x, y, z>
, o Tuple<string, bool, value>
.
C # 4.0 tendrá soporte dinámico para tuplas, pero aparte de eso, debe hacer su propia transferencia o descargar una biblioteca Tuple.
Puedes ver mi respuesta aquí donde pongo un código de muestra para una clase de tupla genérica. O puedo volver a publicarlo aquí:
public class Tuple<T, T2, T3>
{
public Tuple(T first, T2 second, T3 third)
{
First = first;
Second = second;
Third = third;
}
public T First { get; set; }
public T2 Second { get; set; }
public T3 Third { get; set; }
}
En realidad, lo que acaba de describir es un uso ideal para la colección Dictionary. Se supone que contiene clave: pares de valores, independientemente del tipo de valor. Al hacer que el valor sea de su propia clase, podrá ampliarlo fácilmente en el futuro, si fuera necesario.
La publicación del diccionario de Multivalue podría servir a sus necesidades.
No creo que .net tenga incorporado Multi-Map, que generalmente es una estructura de datos que puede usar para hacer este tipo de almacenamiento. Por otro lado, no creo que sea exagerado utilizar un objeto personalizado que contenga tanto una cadena como un booleano.
Otra idea es almacenar el booleano en una estructura de datos separada, por ejemplo, un HashSet.
Tuple es siempre una buena solución. Además, en un enfoque orientado a objetos, siempre favorece la composición sobre la herencia. Construye un objeto compuesto haciendo la agrupación. Simplemente. Creo que está cubierto con algunas soluciones buenas y limpias aquí, de otros ers. :)
Un diccionario es solo una colección de objetos con clave. Como tal, contendrá cualquier tipo de objeto que desee. Incluso el más simple de los objetos, como, por ejemplo, una matriz (que se deriva de Object), pero requiere mucho menos código en su nombre.
En lugar de escribir una clase completa, coloque una matriz asignada dinámicamente o una Lista en el valor y ejecútelo con eso.
Los diccionarios son muy flexibles de esa manera.
class MappedValue
{
public string SomeString { get; set; }
public bool SomeBool { get; set; }
}
Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;