2009-07-02 5 views
6

Esiste una struttura dati .NET che è possibile utilizzare per la ricerca bidirezionale?Mappa bidirezionale in .NET

Ecco il problema: Serializzazione. Il mio oggetto contiene un campo che punta a uno dei 10 oggetti statici predefiniti. Durante la scrittura sul file, scrivo un singolo carattere che rappresenta a quale dei 10 oggetti viene fatto riferimento. A questo punto, ho bisogno di una struttura di dati di ricerca che mi permetta di ottenere il codice di carattere basato sull'oggetto a cui si fa riferimento. Quando deserializzare, ho bisogno di fare il contrario. Posso pensare a molti altri posti in cui potrei usare una tale struttura di dati.

+0

Spiacente, ho modificato la mia risposta dopo averla accettata per correggere un errore di digitazione e "non accettata". Dispari. –

+0

Scott, ho cambiato idea perché entrambe le risposte sottostanti sembrano abbastanza buone. +1 a entrambi. –

+0

@Agnel - ahh, nessun problema allora! –

risposta

5

Nel caso di solo 10 casi che verranno modificati raramente, un paio di metodi che utilizzano le istruzioni di Switch probabilmente sarebbero sufficienti.

Se si ha il controllo degli oggetti statici, poi tutti potevano implementare una nuova interfaccia che restituisce un carattere "codice di serializzazione":

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

Pertanto, andando in quella direzione è facile: someObject.SerializationCode. Quindi si potrebbe anche fare in modo che tutti gli oggetti statici utilizzino un costruttore che registri il proprio SerializationCode con un'istanza singleton con un dizionario.

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

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

Deserializzare, basta prendere il carattere ed eseguirlo attraverso quel dizionario per recuperare l'oggetto statico.

6

Vorrei creare una struttura dati contenente due oggetti generici Dictionary che si specchiano in modo che la chiave di uno rappresenti il ​​valore dell'altro e viceversa. Ciò consentirebbe la ricerca di O(1) in entrambe le direzioni.

+0

Fintanto che tutte le chiavi e i valori sono univoci, questo dovrebbe funzionare – Nick

+0

In questa domanda specifica, l'OP avrebbe comunque bisogno di creare una sorta di registro globale per ospitare questa struttura dati, e l'OP deve implementare in qualche modo tutto il oggetti statici per registrarsi con questa struttura dati globale. In tal caso, non tutti gli "oggetti statici" devono già conoscere il proprio carattere rappresentativo in modo che possa registrarsi? –

+0

Questa è una buona idea, vorrei solo fare attenzione a controllare entrambe le .Contezze prima di fare entrambe. Aggiungere solo in modo che se c'è un conflitto non si inquina il dizionario. –