1

アプリケーションで SortedDictonary(Of String, String) を使用していますが、奇妙な並べ替え動作が発生します。次のコード例を検討してください。

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", "")

キーが「'A」、「'B」、「'C」、「A」、「B」、「C」のようにソートされることを期待します。これは、キーを「手で」比較したときに得られるものです。 < 演算子を介して。それでも、キーを反復すると、「A」、「'A」、「B」、「'B」、「C」、「'C」が返されます。

SortedDictionary の動作を変更して、'最初から始まる単語を並べ替えるにはどうすればよいですか?

CFPさん、ありがとう

4

3 に答える 3

4

私の電話帳では、JohnO'LearyがOleTractorsとDennisOleckを並べ替えています。カルチャに依存しないソートを使用する必要があります。

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
于 2009-12-28T10:36:03.477 に答える
2

別の比較演算子を指定する必要があります。

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
于 2009-12-28T10:25:56.867 に答える
0

SortedDictionary(TKey, TValue)のすべてのキーは、既定の比較子に従って一意である必要があります。

SortedDictionary(TKey, TValue) では、キー比較を実行するために比較子の実装が必要です。このコンストラクターは、既定の (ローカル カルチャに依存する) ジェネリック等値比較演算子 Comparer(T).Default を使用します。TKey 型が System.IComparable(T) ジェネリック インターフェイスを実装している場合、既定の比較子はその実装を使用します。または、比較パラメーターを受け入れるコンストラクターを使用して、IComparer(T) ジェネリック インターフェイスの実装を指定できます。

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

出力:

'A > 
'B > 
'C > 
A > 
B > 
C > 
于 2009-12-28T10:25:16.510 に答える