Necesito guardar 2 valores en una lista, así que tengo todas las posiciones Y mis controles de mi placa en una lista. Estaba usando un diccionario pero descubrí que solo hay un mapeo de una manera. ¿Alguien tiene alguna recomendación, excepto una matriz bidimensional?Lista de asignación bidireccional
Respuesta
Puede utilizar un diccionario con bastante facilidad como una asignación de dos vías si no se preocupan por el rendimiento lineal de búsqueda para el mapeo inverso (que se obtendría con una matriz 2D de todos modos):
var dictionary = new Dictionary<string, int>();
// Fill it up...
int forwardMapResult = dictionary["SomeKey"];
string reverseMapResult = dictionary.Where(kvp => kvp.Value == 5).First().Key;
Si la velocidad de búsqueda es un problema, tendrá que mantener dos diccionarios, uno para la búsqueda directa y otro para el reverso. O use una base de datos indexable en memoria como SQLite.
Esto puede ayudar:
public class BiDirectionalDictionary<L, R>
{
private readonly Dictionary<L, R> leftToRight = new Dictionary<L, R>();
private readonly Dictionary<R, L> rightToLeft = new Dictionary<R, L>();
public void Add(L leftSide, R rightSide)
{
if (leftToRight.ContainsKey(leftSide) ||
rightToLeft.ContainsKey(rightSide))
throw new DuplicateNameException();
leftToRight.Add(leftSide, rightSide);
rightToLeft.Add(rightSide, leftSide);
}
public L this[R rightSideKey]
{ get { return rightToLeft[rightSideKey]; } }
public R this[L leftSideKey]
{ get { return leftToRight[leftSideKey]; } }
public bool ContainsKey(L leftSideKey)
{ return leftToRight.ContainsKey(leftSideKey); }
public bool ContainsKey(R rightSideKey)
{ return rightToLeft.ContainsKey(rightSideKey); }
}
[Serializable]
public class DuplicateNameException : SystemException
{
protected DuplicateNameException(
SerializationInfo info, StreamingContext context);
public DuplicateNameException();
public DuplicateNameException(string s);
public DuplicateNameException(string message,
Exception innerException);
}
Esto tiene un problema si el lado izquierdo y el lado derecho son del mismo tipo ... es decir, que no funciona bien si se intenta
var myBiDireDict = new BiDirectionalDictionary<DateTime, DateTime>();
Muy bien asumiendo que L & R no son del mismo tipo y siempre hay una relación de 1 a 1. –
- 1. Asignación de una lista bidireccional con Hibernate
- 2. Asignación bidireccional de AutoMapper
- 3. NHibernate: asignación de uno a muchos bidireccional con semántica IList
- 4. Mapa bidireccional en Java?
- 5. Lista de asignación de escalar Contexto
- 6. lista de asignación escasa en pitón
- 7. Asignación de lista a un valor en esa lista
- 8. Hibernate y H2 "Infracción de restricción de integridad referencial" para la asignación OneToMany bidireccional
- 9. Nhibernate - La lista de asignación no actualiza los índices de lista
- 10. Diccionario bidireccional?
- 11. externa bidireccional
- 12. ahorro bidireccional ManyToMany
- 13. vista de desplazamiento bidireccional
- 14. mapeo bidireccional de Python
- 15. IndexError: lista de índice de asignación fuera de rango
- 16. @OneToMany límite de tamaño de lista de asignación
- 17. bidireccional Android Beam
- 18. Mapa bidireccional en .NET
- 19. DataGridCheckboxColumn enlace bidireccional
- 20. RPC asíncrona bidireccional
- 21. @OneToOne unidireccional y bidireccional
- 22. Encriptación bidireccional en PHP
- 23. Mapa bidireccional en Cocoa
- 24. Clarificación SSL bidireccional
- 25. RESTful: comunicación bidireccional
- 26. Biblioteca de cifrado bidireccional Java
- 27. WPF enlace bidireccional XML
- 28. Python: Cifrado alfanumérico bidireccional
- 29. Asignación de una lista de valores numéricos a los colores
- 30. ¿Asignación de una lista anidada con List Comprehension en Python?
¿Desea almacenar 2 tipos diferentes en una sola colección? –
¡Eso es exactamente lo que quiero hacer! –