» »

[C#] sortiranje priimkov po slovenski abecedi

[C#] sortiranje priimkov po slovenski abecedi

JoSmo ::

Pozdravljeni,

na faksu sem dobil nalogo, v kateri moram priimke razvrstit po slovenski (č, š, ž) abecedi. Nesmem uporabljat vgrajene sort metode/funkcije. Če kdo ve kak se to naredi, prosim za pomoč.

Lep pozdrav.
Tastro
  • spremenil: JoSmo ()

vorantz ::

string[] priimki = { "Čučnik", "čačnik", "Čašnik", "Antonovski", "Amtonovski", "Žiga", "Žaga", "Bojan"};

            foreach (var p in priimki)
            {
                Console.WriteLine(p);
            }
            Console.WriteLine("----------------");

            var sorted = priimki.OrderBy(x => x);

            foreach (var p in sorted)
            {
                Console.WriteLine(p);
            }

            Console.ReadKey();


Uporabiš orderby namesto sort :>

JoSmo ::

Hvala. Ampak tudi orderby nesmem uporabit. :(

lebdim ::

gre za leksikografsko urejanje, ki ste ga gotovo jemali pri algoritmih in podatkovnih strukturah, če ne, pa malo pogooglaj ... se pravi, moraš v programu napisati kodo za leksikografsko urejanje.

@tastro,
tukaj imaš nekaj o leksikografskem sortiranju.

Zgodovina sprememb…

  • spremenil: lebdim ()

JoSmo ::

@lebdim tnx. bom si pogledal.

za 1x mi sortiranje po ANG dela... samo šumnike mi da na konec. :(

Tako zgleda moja trenutna koda:

static bool Uredi(Stranka stranka1, Stranka stranka2)
        {
            bool prviJeManjši = false;
            int dolžinaKrajšegaPriimka;

            // zagotovi da nebo prvi priimek daljši od drugega
            if (stranka1.priimek.Length > stranka2.priimek.Length)
            {
                dolžinaKrajšegaPriimka = stranka2.priimek.Length;
            }
            else
            {
                dolžinaKrajšegaPriimka = stranka1.priimek.Length;
            }

            for (int i = 0; i < dolžinaKrajšeBesede; i++)
            {
                if ((char)stranka1.priimek[i] < (char)stranka2.priimek[i])
                {
                    prviJeManjši = true;
                    break;
                }
            }
            return prviJeManjši;
        }


s tem primerjam... potem pa se mam eno cisto enostavno bubble sort funkcijo.

Zgodovina sprememb…

  • spremenil: JoSmo ()

JoSmo ::

Mi je ratalo naret. Če koda zanima kak mi je ratalo:

Spodna funkcija vrne index pozicijo polja (array) za char (črko) v tej moji custom abecedi, ki vsebuje šumnike. Potem pa z drugo funkcijo primerjam indexa (poziciji) in tako zvem kateri char je večji. Za tem pa uporabim samo se eno simpl bubble sort funkcijo, da vse skupaj sortiram. Hvala vsem za pomoč!

static int Pozicija(char znak)
        {
            int pozicija = -1;
            string Abeceda = "ABCČDEFGHIJKLMNOPRSŠTUVZŽ";

            for (int j = 0; j < Abeceda.Length; j++)
            {
                if (char.ToUpper(znak) == (char)Abeceda[j])
                {
                    pozicija = j;
                }
            }
            return pozicija;
        }

mihies ::

Uporabi tale konstrukt:
var sorted = priimki.OrderBy(s => s,StringComparer.Create(new CultureInfo("sl-SI"), false)); 

oziroma, če je trenutni CultureInfo že slovenski, potem:
var sorted = priimki.OrderBy(s => s,StringComparer.CurrentCulture); 

V obeh primerih imaš možnost upoštevati male in velike črke.

Prečital,da ne smeš uporabiti vgrajene funkcije. Eh, bom vseeno pustil tukaj.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

Zgodovina sprememb…

  • spremenil: mihies ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Sort za string (slovenska abeceda)

Oddelek: Programiranje
5870 (679) mihies
»

[C#] Deserializacija

Oddelek: Programiranje
181758 (1361) Cvenemir
»

c sharp LinkedList - Naloga

Oddelek: Programiranje
91702 (1653) Msatir
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
51399 (1260) Presidente

[C#]polje znakov

Oddelek: Programiranje
112212 (2040) Ziga Dolhar

Več podobnih tem