dodałem odpowiedź na to pytanie tutaj: Sorting List<String>
in C# który wzywa do naturalnego porządku sortowania, jeden, który obsługuje osadzone liczb.Pisanie lepszego rodzaju niż naturalne (kopalni)
Moja implementacja jest jednak naiwna, a zamiast wszystkich postów tam, o tym, w jaki sposób aplikacje nie obsługują poprawnie Unicode, zakładając, że (Turcja przetestuje kogokolwiek?), Myślałem, że poproszę o pomoc w napisaniu lepsza realizacja. Lub, jeśli jest wbudowana metoda .NET, proszę mi powiedzieć :)
Moja implementacja odpowiedzi na to pytanie przechodzi przez ciągi, porównując postać po znaku, aż napotka cyfrę w obu. Następnie wyodrębnia kolejne cyfry z obu ciągów, co może skutkować różnymi długościami, padami najkrótszymi z zerami wiodącymi, a następnie porównywać.
Istnieje jednak problemy z nim.
Na przykład, jeśli w ciągu x mają dwa punkty kodowe, które razem tworzą znak È, ale w drugim ciągu masz tylko jeden kod, który jest tą literą.
Mój algorytm nie powiedzie się na nich, ponieważ byłoby traktować diakrytyczną kodowy jako pojedynczego znaku, i porównać go do E z drugiego łańcucha.
Może ktoś poprowadzi mnie ku jak obsługiwać to prawidłowo? Chcę obsługiwać określenie obiektu CultureInfo
, aby poradzić sobie z problemami językowymi, takimi jak porównywanie "ss" z "ß" w Niemczech i podobne rzeczy.
Myślę, że potrzebuję dostać mój kod by wyliczyć nad "prawdziwymi znakami" (ja nie znam prawdziwego terminu tutaj) zamiast indywidualnych codepoints.
Co to jest właściwe podejście do tego?
Ponadto, jeśli „naturalny” oznacza „sposób ludzie oczekują go do pracy”, chciałbym dodać następujące rzeczy do rozważenia:
- Co o terminach i godzinach?
- Co z wartościami zmiennoprzecinkowymi?
- Czy istnieją inne sekwencje, które są uważane za "naturalne"?
- Jak daleko powinno to być rozciągnięte? (Eeny, meeny, miny, Moe)
Hi hans ... jeszcze raz jak zwykle ... niesamowita odpowiedź ... Po prostu ciekawy ... skąd dowiedziałeś się o bibliotece DLL do P/Invoke into ?? – Dinesh
Jest to udokumentowane w artykule MSDN dla funkcji, na dole. –
Znalazłem ... dzięki – Dinesh