[ DjoleReject @ 07.06.2008. 18:40 ] @
Sitruacija je sledeca:
Pravim sanskritski recnik u C#. Unesene reci ubacujem u List<String>. Listu pokusavam da sortiram, ali ne radi kako treba. Cisto da napomenem da se radi o izuzetno cudnom jeziku, zasnovanom na slogovima koji cine slova. Ja sam mislio da unicode vodi racuna o takvim stvarima i da je dovoljno reci list.Sort() , pa da se svaki jezik izsortira po sopstvenim pravilima. Ocigledno je da sam ziveo u zabludi. BTW, moj "maternji" je C++, mada znam dosta C#a, ali ovakvi problemi nisu bas ono s cime se cesto srecem.

Nasao sam jedno moguce resenje:
Code:
 CompareInfo comp = CompareInfo.GetCompareInfo(0x044F); 

nakon cega pomocu promenljive comp izvrsavam poredjenje dva stringa. Ovo se uopste ne ponasa kako treba (kako sam ja zamislio da treba). Inace, ovaj kod u zagradi (0x44F) je rezervisan za sanskrit, svaki jezik ima svoj kod koji se nalazi na MSDNu.

Ima li neka funkcija koja bi omogucila poredjenje dva unicode stringa da bi se izvrsilo pravilno sortiranje? Bilo kakva ideja, link, smernica su dobrodosli. Hvala unapred.
[ mmix @ 07.06.2008. 21:02 ] @
Unicode sam po sebi nema sortiranje, to je samo tabela mapiranja karaktera i iako za neke kodne rasporede unicode binarni kodovi zadovoljavaju sort za vecinu ne zadovoljava. Sa druge strane, kad uradis list.Sort() ti zapravo sortiras po sort pravilu koje vazi za trenutnu kulturu trenutnog thread-a.

Ovo sto si uradio sa CompareInfo je malo komplikovan nacin za komparaciju, preporuceni nacin je koriscenje StringComparer klase koja implementira IComparer<string> koji ti treba u sort metodi:

Code:

            List<string> lista = new List<string>() { "संस्कृता वाक् ", "संस्कृतम्" };
            StringComparer sc = StringComparer.Create(new CultureInfo("sa"), false);
            lista.Sort(sc);
[ DjoleReject @ 07.06.2008. 22:05 ] @
Citat:
mmix: Unicode sam po sebi nema sortiranje, to je samo tabela mapiranja karaktera i iako za neke kodne rasporede unicode binarni kodovi zadovoljavaju sort za vecinu ne zadovoljava. Sa druge strane, kad uradis list.Sort() ti zapravo sortiras po sort pravilu koje vazi za trenutnu kulturu trenutnog thread-a.

Ovo sto si uradio sa CompareInfo je malo komplikovan nacin za komparaciju, preporuceni nacin je koriscenje StringComparer klase koja implementira IComparer<string> koji ti treba u sort metodi:

Code:

            List<string> lista = new List<string>() { "संस्कृता वाक् ", "संस्कृतम्" };
            StringComparer sc = StringComparer.Create(new CultureInfo("sa"), false);
            lista.Sort(sc);


Odlicno. Hvala ti na odgovoru.
Video sam i tu funkciju i malo proguglao o njoj, ali nisam u stvari shvatio kako da je upotrebim. Idem da proverim ovo...
[ DjoleReject @ 07.06.2008. 22:37 ] @
Evo, proverih i ipak ispada da se string sortira po latinicnoj verziji. Znaci, ignorise se CultureInfo("sa") kao da i ne postoji. Kad ispisem ekvivalent sortiranih reci nekim latinicnim fontom, vidim da je dobro sortiran, problem je sto to nista ne znaci za sanskritsku azbuku koja bi trebalo da ima svoja pravila. Da li mozda masim nesto ocigledno???
[ DjoleReject @ 08.06.2008. 14:19 ] @
Greska je bila moja, jer koristeni font uopste nije bio unicode. Nije mi ni palo na pamet da toliko cest font moze biti ne-unicode, ali eto sta se desava kad covek nije dovoljno skoncentrisan. Hvala mmixu i izvinite ako je tema napravila nepotreban sum.