Domanda

Ho una casella combinata che, quando selezionata, visualizza il testo in 3 caselle di testo.

Gli elementi della casella combinata sono i 50 stati e le caselle di testo visualizzano le informazioni sugli statuti statali. In questo momento sto usando un array multidimensionale per contenere i dati per ogni stato (ogni elemento nell'array contiene lo stato, articolo 1, voce 2, voce 3).

La mia domanda è: sarebbe meglio o più compatto creare un tipo di dati di stato che contiene i 3 elementi e in realtà se questo è anche un approccio efficace? Non mi piace l'array, è tutto ciò che so come fare adesso.

Per la maggior parte, i 3 tipi di dati vengono utilizzati ripetutamente.

Ad esempio, uno di questi è il fuso orario utilizzato dallo stato, quindi ci sono solo 6 possibili opzioni.

Non ho il codice di fronte a me o lo pubblicherei, solo qualcosa a cui stavo pensando.

È stato utile?

Soluzione

La domanda che devi porsi su un array multidimensionale è: "Un altro programmatore può guardarlo e capire cosa sta succedendo?"

È più compatto? Forse Mayby no. Tutto dipende dal codice. In verità, a meno che tu non abbia a che fare con requisiti di memoria molto bassi, probabilmente non importa. Pensaci in questo modo, diciamo che ogni fuso orario occupa quattro byte (dimensioni di un numero intero). Avere una voce per ogni fuso orario significa che hai usato ciò che 50 x 4 = 200 byte. Non abbastanza di cui preoccuparsi in entrambi i casi.

Lo cambierei, perché tra 6 mesi probabilmente avrai difficoltà a capire cosa fa. La leggibilità e la manutenibilità sono il re in quasi tutte le situazioni.

Quindi forse un esempio è:

class State
{
    public State (string stateId, int timeZoneOffset)
    {
       StateId = stateId;
       TimeZoneOffSet = timeZoneOffset;
    }

    public String StateId {get;set;}
    public int TimeZoneOffest {get;set;}
}

public class StatesAndTerritories
{
    List<State> _states = new List<State>
    public StatesAndTerritories ()
    {
      //_state.Add state information here

      _state.Add(new State("AZ", -6); ......

    }

    public IEnumerable<State> GetStates (){
     return _state;
    }

   public IEnumerable<State> GetStatesInZimeZone(int timezone)
    {}

    etc..
}

Altri suggerimenti

Scegli il tipo personalizzato, è più pulito (è possibile accedere alle proprietà per nome), meno soggetto a errori (è più difficile confondere i nomi degli indici) e mantenibili (le proprietà non sono "ordinate", non c'è non necessario length Ciò deve adattarsi al conteggio delle proprietà e se si desidera proprietà di diversi tipi hai la sicurezza del tipo).

Il codice sorgente sarebbe utile per me capire cosa stai facendo esattamente.

Se la prestazione pura è un obiettivo, suggerirei un array a dimensione singola con una struttura che detiene le informazioni per ogni stato.

Ciò accelerebbe l'accesso agli elementi e renderebbe più facile tenere traccia di quale variabile ha quale valore (variabili denominate anziché indici di array). È importante ricordare che una struttura è un tipo di valore, quindi se la passa a un'altra funzione, la funzione otterrà una copia della struttura e non dell'originale. Questo non è un problema se lavori direttamente con l'array, ma sarà un problema se si utilizza l'elenco o devi passare le informazioni sullo stato selezionato a un altro metodo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top