2011-09-28 2 views
0

정렬되지 않은 객체 컬렉션의 name 속성을 기반으로 다음 객체를 찾는 간단한 루틴이 있습니다. 나는 컬렉션을 통해 List(of String)에있는 모든 이름을 모으고 >이라는 이름을 추가합니다.이 이름은 현재 키 뒤에 나오는 모든 것을 제공해야합니다. 그런 다음 List(of String)에 기본 .Sort() 메서드를 사용하여 목록을 정렬하고 목록의 첫 번째 항목을 취합니다.이 항목은 다음 항목이어야합니다. 이전 항목을 찾으려면 그 반대를하고 모든 항목을 <에 추가하고 현재 이름을 정렬하고 목록의 마지막 항목을 가져옵니다.String.Sort와 Greater/Than/Less보다 작음 연산자의 차이점 VB.Net

그러나이 방법은 일부 항목을 건너 뜁니다. 예를 들어 1210, 1210-ADA 및 1210_ADA_DB라는 항목이 있습니다. 이 방법을 사용하면 다음 항목을 가져 오는 것이 가운데 항목 1210-ADA를 건너 뛰고 1210_ADA_DB를 찾지 만 이전 항목을 찾는 것이 효과가있는 것처럼 보입니다.

내 프로세스가 맞으면 <> 연산자가 .Sort() 메서드와 다르게 비교됩니다. 사실입니까? 차이점은 무엇입니까? 다음 항목을 찾기위한

코드 :

 Dim Key As String = Name 
     Dim NameList As New List(Of String) 
     For Each obj As T In Collection 
      Dim ObjKey As String = Obj.Key 
      If ObjKey > Key Then 
       NameList.Add(ObjKey) 
      End If 
     Next 
     If NameList.Count = 0 Then Return Nothing 
     NameList.Sort() 
     Dim NextKey As String = NameList.First 
+2

* 귀하의 코드를 설명하는 대신 * 귀하의 코드를 게시 하시겠습니까? –

답변

1

나는 문제가 무엇인지 이미 알고 있다고 생각합니다. 그러나 주석을 달기 위해 VB6 호환성 문제가 발생합니다. Option Compare의 기본값은 String.CompareOrdinal()을 사용하는 Binary입니다. List.Sort()가 사용하는 것이 아닙니다. Option Compare Text는 CultureInfo.CompareInfo.Compare()를 CompareOptions.IgnoreWidth, CompareOptions.IgnoreKanaType, CompareOptions.IgnoreCase 옵션과 함께 사용합니다. 또한 List.Sort()가 사용하는 것이 아닙니다.

대신 연산자를 사용하지 말고 String.Compare()를 사용하십시오.

1

내 유일한 설명은 <과> 사업자가 .Sort() 메소드와 다르게 비교한다는 것입니다. 사실입니까?

Sort 내부적 <>으로 일관된 결과를 낳는 String.IComparable(Of String).CompareTo 방법을 사용한다.

그러나 이것은 프로젝트 또는 현재 파일에 대해 Option Compare을 변경하지 않은 경우에만 해당됩니다. 위의 방법이 아닌 <>의 동작이 변경됩니다.

+0

옵션을 변경하지 않았습니다. 내 프로젝트 설정에 따르면 Option Compare는 바이너리로 설정되어 있는데, 기본 설정이라고 가정합니다. – Kratz

+0

당신이 나를 내 대답으로 이끌었지만, < and >은 String.CompartTo와 분명히 다르다. CompareTo에 대한 문서는'이 메서드는 현재 문화권을 사용하여 단어 (대소 문자를 구분하고 문화적으로 민감한) 비교를 수행한다. '및'Option Compart Text'는'응용 프로그램의 로켈에 의해 결정되는 대소 문자를 구별하지 않는 텍스트 정렬 순서에 기초한 문자열 비교를 말합니다 .' – Kratz

+0

@Kratz 당신이 인용 한 것은'Option Compare Text'에 대해서만 중요합니다. 'Option Compare Binary'에서 그들은 똑같이 행동합니다 (대소 문자 구별, 문화적으로 민감합니다). –

관련 문제