2009-12-28 2 views
1

내 응용 프로그램에서 SortedDictonary (Of String, String)을 사용하고 있는데 이상한 정렬 동작이 발생합니다. 다음 코드 예제 생각해SortedDictionary 동작

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(TKey, TValue)의 모든 키는 기본 비교에 따라 고유해야 CFP

답변

4

, 올레 트랙터와 데니스 Oleck 사이에 존 오리어리의 종류 :

'A > 
'B > 
'C > 
A > 
B > 
C > 
+1

사실 저는 이것을 생각하지 않았습니다. 고마워요! –

0

을 주셔서 감사합니다.

SortedDictionary (TKey, TValue)는 키 비교를 수행하기 위해 비교 자 구현이 필요합니다. 이 생성자는 기본 (지역 문화에 따라 다름) 제네릭 동등 비교자인 Comparer (T) .Default를 사용합니다. TKey 유형이 System.IComparable (T) 제네릭 인터페이스를 구현하는 경우 기본 비교자는 해당 구현을 사용합니다. 또는 comparer 매개 변수를 사용하는 생성자를 사용하여 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 

출력 : 내 전화 번호부에서

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

당신은 다른 비교자를 지정해야합니다. 문화가 아닌 종 류별 정렬을 사용해야합니다.

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