Domanda

Sto cercando di capire come creare un dizionario ordinato in cui la chiave è ordinata in modo non alfabetico. C'è un modo per definire il modo in cui voglio che per ordinare?

Per esempio, le chiavi potrebbe essere in ordine come il seguente:

AAA1X
AAB1Y
AAC1Y
AAA2X
AAB2Y
AAC2X

Anche se le prime tre lettere sono alfabetico, se sorta come è che li groppo in ordine errato (a causa del numero). Inoltre nota, che v'è una X o Y alla fine. Nel codice, ci sarà sempre solo una X o un Y.

Anche se posso scrivere un'enumerazione per l'ordinamento di tutte le possibili combinazioni che sarei disposto a fare anche questo, ma non sono sicuro di come posso usare il dizionario ordinata ed una enumerazione ...

So che questo è un po 'vago, ma qualsiasi aiuto sarebbe molto apprezzato!

Cheers!

È stato utile?

Soluzione

Uno dei costruttori per SortedDictionary<TKey, TValue> prende un IComparer<TKey>, in cui è possibile specificare una classe di confronto personalizzato che il dizionario utilizzerà per l'ordinamento.

public class CustomComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // do your own comparison however you like; return a negative value
        // to indicate that x < y, a positive value to indicate that x > y,
        // or 0 to indicate that they are equal.
    }
}

...

SortedDictionary<string, object> dict = 
              new SortedDictionary<string, object>(new CustomComparer());

Altri suggerimenti

È possibile:

Creare una classe che incapsula quelle chiavi e sovrascrivere il == operatore, il metodo e il metodo Object.Equals Object.GetHashCode. Inoltre hanno la classe di implementare il IComparable interfaccia in modo tale che le regole per l'uguaglianza volontà ordinare automaticamente le chiavi nel modo giusto. Ora si può semplicemente inserire quelle chiavi in ??un SortedDictionary o SortedList che verrà automaticamente sorta nel modo desiderato.

o

Implementare un href="http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx" rel="nofollow"> IComparer oggetto SortedDictionary o SortedList .

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