Diskuze: Setřídění podle maďarské abecedy

C# .NET .NET (C# a Visual Basic) Setřídění podle maďarské abecedy American English version English version

Avatar
jenda
Člen
Avatar
jenda:

Můžete mi prosím poradit, jak mám pole stringů setřídit podle maďarské abecedy? Jde o to, že maďarština, podobně jako čeština, obsahuje vícepísmenné znaky, které patří v abecedě jinam, než pokud by šlo o jednopísemné znaky. Je to analogie s českým CH, které se v české abecedě řadí za H, protože jde o vícepísemný znak. Pokud bychom ho řadili jako jednopísemný znak, byl by zahrnut do C. Maďarština má takovýchto znaků podstatně více.

 
Odpovědět 27. ledna 8:31
Avatar
Luboš Běhounek (Satik):

Nějak takhle :)

CultureInfo culture = new CultureInfo("hu-HU");
var result = myList.OrderByDescending(x =>
               x, StringComparer.Create(culture, false));
Editováno 27. ledna 8:56
Nahoru Odpovědět  +1 27. ledna 8:54
:)
Avatar
jenda
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
jenda:

Moc děkuji za odpověď. Omlouvám se za nepřesnost v otázce - pole má tři položky (madarsky, vyslovnost, cesky) a řadím to v tuto chvíli takto:

Array.Sort(vysledek, delegate(Slovnik vysledek1, Slovnik vysledek2)
            {
                return vysledek1.madarsky.CompareTo(vysledek2.madarsky);
            });

Mohu na to aplikovat to, co jsi mi napsal?

Děkuji

 
Nahoru Odpovědět 27. ledna 9:04
Avatar
Luboš Běhounek (Satik):

Tam je hlavní jen na to porovnání stringů použít ten StringComparer s maďarským cultureinfo.

Jinak kvůli rychlosti bych to nevytvářel uvnitř toho delegáta pokaždý znova, ale měl to už vytvořený někde bokem, možná na to udělal vlastní třídu

Nahoru Odpovědět 27. ledna 10:06
:)
Avatar
jenda
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
jenda:

Můžete mi to prosím víc vysvětlit? Na rychlosti mi nezáleží, klidně to může třídit několik hodin. Mohu to tedy použít do toho svého třídění? Jak? Omlouvám se, nejsem příliš pokročilý v programování. Děkuji za ochotu

 
Nahoru Odpovědět 27. ledna 10:25
Avatar
Luboš Běhounek (Satik):

Místo

return vysledek1.madarsky.CompareTo(vysledek2.madarsky);

vrátíš

CultureInfo culture = new CultureInfo("hu-HU");
return StringComparer.Create(culture, false).Compare(vysledek1.madarsky, vysledek2.madarsky);
Nahoru Odpovědět 27. ledna 10:51
:)
Avatar
jenda
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
jenda:

Děkuji moc, funguje to bezvadně. Paráda. Obdivuji, jak tohle všechno může někdo umět.

Ještě jeden doplňující dotaz. Na stránce https://msdn.microsoft.com/…ary/a7zyyk0c(v=vs.100).aspx jsem si našel, že pro maďarštinu existují dva druhy řazení. Bylo by možné to do toho nějak zakomponovat? Chtěl bych vyzkoušet to technické řazení, ona je maďarština v té abecedě hodně specifická.

Každopádně děkuji za pomoc, i takhle to funguje bezvadně.

 
Nahoru Odpovědět 27. ledna 11:29
Avatar
Odpovídá na jenda
Luboš Běhounek (Satik):

google, neznám to nazpaměť :)

jen se jinak vytvoří CultureInfo

např.

CultureInfo culture = new CultureInfo(0x0001040e, false);
Nahoru Odpovědět 27. ledna 11:38
:)
Avatar
jenda
Člen
Avatar
 
Nahoru Odpovědět 27. ledna 12:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.