En mi proyecto Last Light desarrollando un sistema de inventario para Unity enfrenté un problema clásico: la interfaz tiene secciones de ranuras como mochila armas, mochila consumibles, armas equipadas y consumibles equipados. El InventorySystem gestiona los datos y la lógica mientras que InventoryUIController se encarga de la presentación. Para enlazar ambos utilicé inicialmente un diccionario que mapea secciones a tipos de ítem, lo que sirve bien para mostrar datos del sistema en la UI. El problema surge a la inversa cuando el jugador hace clic en una ranura y necesito conocer a qué sección pertenece. Un diccionario normal obliga a recorrer entradas para invertir la búsqueda y eso no es eficiente.
La solución fue implementar un Bi-Dictionary, una estructura de datos que permite búsquedas en ambas direcciones en tiempo constante O(1). La idea es simple y elegante: mantener internamente dos diccionarios sincronizados, uno que mapea clave a valor y otro que mapea valor a clave. Con esto se obtiene GetValue(key) para obtener el valor desde la clave y GetKey(value) para obtener la clave desde el valor, además de Add, Remove y métodos TryGet para manejo seguro. Al mantener ambas tablas actualizadas al mismo tiempo se evita coste adicional al invertir la consulta.
En términos prácticos para Unity y C# esto se traduce en una clase BiDictionary con dos Dictionary internas. Las operaciones clave son Add(key, value) que valida duplicados y añade a ambos diccionarios, TryGetValue(key, out value) y TryGetKey(value, out key) para búsquedas seguras, y RemoveByKey o RemoveByValue para eliminar sin perder sincronía. Con este patrón la UI puede preguntar rápidamente a qué sección pertenece una ranura cuando el usuario interactúa y el sistema puede resolver qué ítems mostrar por sección sin recorrer colecciones completas.
Casos de uso adicionales donde un Bi-Dictionary aporta valor incluyen mapeos acción a efecto de sonido, por ejemplo GunshotAction a GunshotSound, donde un script reproduce el sonido por acción y otro detecta el sonido y resuelve la acción inversa; o en localización cuando se necesita resolver palabras y traducciones en ambos sentidos. En general es una herramienta muy útil cuando se requieren búsquedas bidireccionales rápidas.
En Q2BSTUDIO aplicamos este tipo de patrones y buenas prácticas en proyectos de aplicaciones a medida y software a medida para optimizar rendimiento y mantenibilidad. Como empresa de desarrollo de software ofrecemos soluciones que incluyen inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi entre otros. Si tu proyecto requiere construir una arquitectura sólida para gestión de datos y UI, consulta nuestras capacidades en Desarrollo de aplicaciones y software a medida o explora nuestras soluciones de inteligencia artificial para empresas para añadir agentes IA y automatizaciones inteligentes.
Resumen de beneficios prácticos del Bi-Dictionary en sistemas de inventario y similares: búsquedas bidireccionales en O(1), sincronía clara entre representaciones lógicas y visuales, menor complejidad de código al eliminar recorridos costosos y mayor claridad al manejar eventos de UI que requieren conocer la sección asociada. Implementarlo es sencillo y puede ahorrarte tiempo y errores en proyectos de mayor escala.
Si necesitas ayuda para incorporar patrones como este en tu proyecto, optimizar rendimiento o diseñar soluciones seguras en la nube y con inteligencia de negocio, en Q2BSTUDIO combinamos experiencia técnica y enfoque a medida para entregarte resultados concretos y escalables.