Domanda

Io sto usando un SortedDictonary (Of String, String) nella mia richiesta, e ho esperienza di un comportamento di ordinamento strano. Si consideri il seguente esempio di codice:

Dim Dic As New SortedDictionary(Of String, String)
Dic.Add("'A", "")
Dic.Add("A", "")
Dic.Add("'B", "")
Dic.Add("B", "")
Dic.Add("'C", "")
Dic.Add("C", "")

mi aspetterei le chiavi da ordinare come " 'A", "' B", "'C", 'A', 'B', 'C', che è quello che si ottiene quando si confrontano i tasti "da mano", attraverso l'operatore <. Eppure, scorrendo i tasti restituisce "A", " 'A", "B", "' B", "C", "'C".

Come posso cambiare il comportamento SortedDictionary per ordinare le parole che iniziano con ' prima?

Grazie, PCP

È stato utile?

Soluzione

Nel mio libro di telefono, John O'Leary ordina tra Ole trattori e Dennis Oleck. Dovrete usare una non-cultura sorta dipendente:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)

Altri suggerimenti

È necessario specificare un operatore di confronto diverso:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)

Ogni chiave in una SortedDictionary (TKey, TValue) deve essere unico secondo l'operatore di confronto di default.

SortedDictionary (TKey, TValue) richiede un'implementazione di confronto per eseguire confronti chiave. Questo costruttore utilizza il valore predefinito (locale cultura dipendente) parità nucleo di confronto Comparer (T) .Default. Se il tipo TKey implementa l'interfaccia generica System.IComparable (T), l'operatore di confronto predefinito utilizza tale implementazione. In alternativa, è possibile specificare un'implementazione del IComparer (T) interfaccia generica utilizzando un costruttore che accetta un parametro di confronto.

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
Dic.Add("'A", "")
Dic.Add("A", "")
Dic.Add("'B", "")
Dic.Add("B", "")
Dic.Add("'C", "")
Dic.Add("C", "")


For Each Item As KeyValuePair(Of String, String) In Dic
  Console.WriteLine(Item.Key & " > " & Item.Value)
Next

Output:

'A > 
'B > 
'C > 
A > 
B > 
C > 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top