Qual è un buon modo per tenere traccia delle stringhe per le ricerche nel dizionario?

6

Sto lavorando al tutorial per le app di Windows 8 .

Hanno un certo codice sul salvataggio dei dati delle app in questo modo:

 private void NameInput_TextChanged(object sender, TextChangedEventArgs e)
        {
            Windows.Storage.ApplicationDataContainer roamingSettings = 
                Windows.Storage.ApplicationData.Current.RoamingSettings;
            roamingSettings.Values["userName"] = nameInput.Text;
        }

Ho lavorato con C # in passato e ho scoperto che cose come l'uso di valori di stringa costanti (come "userName" in questo caso) per le chiavi potevano essere disordinati perché il completamento automatico non funzionava ed era facile dimenticare se avevo fatto una voce per un'impostazione prima e come è stata chiamata. Quindi se non tocco il codice per un po 'finisco per creare accidentalmente più voci per lo stesso valore che hanno un nome leggermente diverso.

Sicuramente c'è un modo migliore per tenere traccia delle stringhe che sono la chiave per quei valori. Qual è una buona soluzione a questo problema?

    
posta Justin 07.10.2012 - 01:09
fonte

2 risposte

7

Lo incapsularò in qualche modo. Forse in questo modo:

class Settings
{
    Windows.Storage.ApplicationDataContainer roamingSettings;

    public Settings()
    {
        roamingSettings =  Windows.Storage.ApplicationData.Current.RoamingSettings;
    }

    public String UserName {
        get { return (String)roamingSettings.Values["userName"]; }
        set { roamingSettings.Values["userName"] = value ;} 
    }

    // etc..
}

Il valore è solo in un posto, quindi puoi sempre controllare ciò che hai già dichiarato. Abilita l'intellisense e lo rende sicuro. Potresti anche rendere tutto statico o singleton.

    
risposta data 07.10.2012 - 17:02
fonte
0

Può dipendere dalla velocità e dalle prestazioni di memoria di cui hai bisogno.

Ho riflettuto molto su radix sort di recente. Ha alcune grandi caratteristiche. Potrebbe essere un ottimo candidato per qualsiasi cosa in cui potresti voler implementare il tuo completamento automatico. La velocità è O (kN) complessità dove k è la lunghezza delle stringhe e N è il numero di stringhe. Lo spazio di archiviazione è anche O (kN).

A differenza di un vettore STL, un elenco collegato o un array di stringhe, il mantenimento di una tabella ordinata non implica una ricerca lineare per un punto di inserimento poiché i dati si trovano in un albero con rami che sono indicizzati dalle lettere nella stringa che è un'operazione a tempo costante ripetuta una volta per ogni carattere nella stringa. Il controllo per vedere se una stringa è nella tabella richiede lo stesso o meno sforzo, terminando quando una delle lettere indicizza un puntatore NULL. Allo stesso modo, trovare le prime stringhe M da visualizzare per un completamento automatico è altrettanto veloce.

Una tabella di hash può anche essere un ottimo strumento per la ricerca di dizionari.

    
risposta data 07.10.2012 - 16:56
fonte

Leggi altre domande sui tag