단어 목록을 포함하는 배열을 정렬하고 binarysearch를 사용하여 동일한 단어를 검색해야합니다. 특정 이유로 인해 단어 목록은 'en-US'즉 미국 지역 설정의 정렬 규칙을 사용하여 항상 정렬되어야합니다. 이 코드는 다양한 국제 운영 체제에서 실행되며 이는 물론 단어 목록이 사용중인 지역 국가 별 설정에 따라 다르게 정렬된다는 것을 의미합니다. 리투아니아 국가 별 설정으로 실행되는 컴퓨터/장치에서 한 가지 문제가 발생할 수 있습니다. 왜? 대부분의 언어에서 문자 "Y는"리투아니아어 동안 X- Y -Z처럼 분류되어 있기 때문에, 정렬 순서는 I- Y -J이다. 이 동작은 내 프로그램에 혼란을 야기 할 수 있습니다. 데스크탑-PC에.net - Array.Sort 및 Array.BinarySearch 문제 - 문화 및 세계화
, 내가 사용하여 순간적으로 미국 영어로 국가 별 설정을 변경할 수 있습니다 :
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ("en-US입니다") 그러나
이후 Windows Mobile (CF.NET) 용으로 개발 중이므로이 코드는 구현할 수 없습니다.
프로그래밍 방식으로 장치의 국가 별 설정을 변경할 수있는 해킹이 발견되었지만 "공식적인"것이 아니므로 위험한 것으로 간주되어이를 방지하는 것이 좋습니다.
내 질문은 : Array.Sort 및 Array.BinarySearch를 사용하여 장치에서 설정된 국가 별 설정에 상관없이 정렬 및 검색하는 동안 CultureInfo = "en-US"를 사용하도록 강제 설정하려면 어떻게해야합니까?
Public Shared Function BinarySearch(Of T) (_
array As T(), _
value As T, _
comparer As IComparer(Of T) _
) As Integer
을하고 (이 "EN-US"를 선택하고 설정) 고려 CultureInfo를 고려하는 비교자를 구현하지만 열심히 노력에도 불구하고 있음을 수행하는 방법을 알고하지 않습니다
은 내가 사용할 수 있으리라 생각합니다. 누구든지 VB.Net이나 C# 또는 샘플 코드를 게시하는 방법에 대해 설명해 주시면 매우 감사하게 생각합니다.
CF.Net에서 작동하는 대안 솔루션에 대해 알고 계시다면, 물론 나는 모든 귀입니다.
감사합니다.
편집 :
내 질문부터 허용 솔루션은 분명 내가 영어와의 연결을 유지하고 싶다고 언급 한 바와 같이 나는 Twanfosson의 답변을 고려할 것입니다.
그러나 융통성있는 방법으로 Guffa의 대답이 최선이라고 생각합니다. 왜? 다른 예를 들어 봅시다 : 독일어의 경우 Ö은 Ö -X-Z로 분류되어 있습니다. 스웨덴어와 핀란드의 경우 순서는 X-Z-Ö입니다. 에스토니아어의 경우 정렬 순서는 Z-Ö-X입니다. 복잡하지 않니? Guffa의 솔루션은 독일어 지역 설정에서 실행되는 장치에서 Swedish sorting-oder (CultureInfo 변경)를 강제 적용하도록합니다. Comparer.DefaultInvariant을 영어로 사용하면이 경우 도움이되지 않습니다. 아마도 Ö이 결국 O가됩니다. 따라서 투표는 Guffa로 이동합니다.