2009-07-02 10 views
6

¿Existe una estructura de datos .NET que pueda usar para la búsqueda bidireccional?Mapa bidireccional en .NET

Aquí está el problema: Serialización. Mi objeto contiene un campo que apunta a uno de los 10 objetos estáticos predefinidos. Al escribir en el archivo, escribo un solo carácter que representa a cuál de los 10 objetos se está haciendo referencia. En este punto, necesito una estructura de datos de búsqueda que me permita obtener el código de caracteres en función del objeto al que se hace referencia. Cuando deserializo, necesito hacer lo contrario. Puedo pensar en muchos otros lugares donde podría usar esa estructura de datos.

+0

Disculpa, he editado mi respuesta después de que la aceptaras para corregir un error tipográfico, y "no la he aceptado". Impar. –

+0

Scott, cambié de opinión porque las dos respuestas a continuación parecen lo suficientemente buenas. +1 a ambos. –

+0

@Agnel - ahh, no hay problema, entonces! –

Respuesta

5

En el caso de solo 10 casos que rara vez cambian, un par de métodos que usan declaraciones Switch probablemente serían suficientes.

Si usted tiene el control de los objetos estáticos, a continuación, todos ellos podrían implementar una nueva interfaz que devuelve un carácter "código de serialización":

public interface IStaticObject 
{ 
    char SerializationCode { get; }; 
} 

Por lo tanto, va en esa dirección es fácil: someObject.SerializationCode. Entonces también podría tener sus objetos estáticos todos usan un constructor que registra su SerializationCode con una instancia singleton que tiene un diccionario.

public class SomeStaticObject : IStaticObject 
{ 
    public void SomeStaticObject() 
    { 
     StaticObjectRegistrar.Register(this.SerializationCode, this); 
    } 

    public char SerializationCode 
    { 
     get 
     { 
      return ?; 
     } 
    } 
} 

deserializar, que acaba de tomar el carácter y ejecuta a través de ese diccionario para obtener el objeto estático espalda.

6

Crearía una estructura de datos que contiene dos objetos genéricos Dictionary que se reflejan entre sí de tal forma que la clave de uno representa el valor de la otra y viceversa. Esto permitiría la búsqueda O(1) en ambas direcciones.

+0

Siempre que todas las claves y valores sean únicos, esto debería funcionar – Nick

+0

. En esta pregunta específica, el PO aún tendría que crear algún tipo de registro global para albergar esta estructura de datos, y el OP debe implementar de alguna manera para todos los objetos estáticos para registrarse en esta estructura de datos global. En ese caso, ¿cada "Objeto estático" ya no tiene que saber acerca de su propio carácter representativo para que pueda registrarse? –

+0

Esta es una buena idea, solo me aseguraré de verificar ambos. Contiene antes de hacerlo. Agregue solo para que si hay un conflicto no contamine ninguno de los dos diccionarios. –