Avatar billede glenn007 Nybegynder
24. september 2009 - 14:08 Der er 12 kommentarer og
1 løsning

sortere en streng

Har lavet en sortering der ikke helt virker den skriver min input streng er forkert format. kan i hjælpe mig til at sorter denne liste så dens output bliver først i alfabetisk rækkefølge ud fra bogstav (  eks.  h´et i 4h ) og dernæst sorter output efter tallet decending.


jeg prøver at få den til med dette eksempel at give mig outputtet
"14h,4h,9q"



static void Main(string[] args)
        {
            string indexs = "4h,14h,9q";
            indexs = string.Join(",", indexs.Split(',').OrderByDescending(v => int.Parse(v.Substring(0))).ToArray());
            Console.WriteLine(indexs);



        }
Avatar billede sirius Nybegynder
24. september 2009 - 14:43 #1
Prøve med følgende kode:
Regex letters = new Regex(@"\w*");
Regex numeric = new Regex(@"\d*");

string indexs = "4h,14h,9q";
var ma = numeric.Match(indexs).Value;
indexs = string.Join(",", indexs.Split(',')
    .OrderByDescending(v => numeric.IsMatch(v) ? int.Parse(numeric.Match(v).Value) : 0)
    .OrderByDescending(v => letters.IsMatch(v) ? letters.Match(v).Value : v)
    .ToArray()
    );
Console.WriteLine(indexs);
Avatar billede sirius Nybegynder
24. september 2009 - 14:47 #2
Du skal have delt dine strenge op så du kan sortere efter bogstav og derefter tal, dette kan du ikke gøre med substring da du ikke ved hvor du skal splitte din streng op.

Jeg har valgt at bruge regex til at finde tal-delen og bogstav-delen og så sortere på disse to hver for sig
Avatar billede glenn007 Nybegynder
24. september 2009 - 15:00 #3
jeg kigger den lige igennem og studere den. jeg vender tilbage. :)
Avatar billede arne_v Ekspert
25. september 2009 - 04:13 #4
Modificeret udgave:

            Regex letters = new Regex(@"[a-zA-Z]\w*");
            Regex numeric = new Regex(@"\d+");
            string indexs = "4h,14h,9q,8p,3h,0z";
            string[] tmp = indexs.Split(',');
            Array.Sort(tmp, (s1,s2) => letters.Match(s1).Value==letters.Match(s2).Value ? int.Parse(numeric.Match(s2).Value) - int.Parse(numeric.Match(s1).Value) : letters.Match(s1).Value.CompareTo(letters.Match(s2).Value));
            indexs = string.Join(",", tmp);
            Console.WriteLine(indexs);
Avatar billede glenn007 Nybegynder
25. september 2009 - 14:03 #5
okey sidder nu med et problem, jeg har svært ved at vurdere omjeg skal vælge den ene frem for den anden løsning.

kan i evt. sætte godt og skidt op imod hinanden så jeg kan se forskellen.  er der performance forskel ?
Avatar billede glenn007 Nybegynder
25. september 2009 - 14:17 #6
arne,  sidder og kigger på din måde at sorter på.

kan du lave den så den sortere først efter værdien af første bogstav og dernæst alfabetisk efter næste bogstav

jeg vil gerne lige se forskellen så jeg bedre kan forstå hvad der sker ved at sætte dem op mod hinanden
Avatar billede arne_v Ekspert
25. september 2009 - 16:57 #7
Jeg tror ikke at de to loesninger sorterer ens, saa start med at teste hvad der matcher dine krav bedst.
Avatar billede arne_v Ekspert
25. september 2009 - 16:58 #8
Hvad er forskellen paa at "sortere først efter værdien af første bogstav og dernæst alfabetisk efter næste bogstav" og at sortere alfabetisk efter alle bogstaver ?
Avatar billede glenn007 Nybegynder
25. september 2009 - 17:54 #9
argh undskyld arne fik skrevet lidt forkert,

jeg mente at den først skulle sortere efter tal og derefter efter bogstav alfabetisk

jeg beklager mange gange

men forskellen er den samme som man siger hehe
Avatar billede arne_v Ekspert
25. september 2009 - 17:57 #10
utestet:

            Array.Sort(tmp, (s1,s2) => int.Parse(numeric.Match(s2).Value) == int.Parse(numeric.Match(s1).Value) ?
letters.Match(s1).Value.CompareTo(letters.Match(s2).Value) :
int.Parse(numeric.Match(s2).Value) - int.Parse(numeric.Match(s1).Value));
Avatar billede glenn007 Nybegynder
26. september 2009 - 17:06 #11
super, der faldt en brik på plads,

smider du et svar arne. din løsning viste sig at være den mest overskuelig for mit niveu.
Avatar billede arne_v Ekspert
26. september 2009 - 20:10 #12
ok
Avatar billede arne_v Ekspert
22. oktober 2009 - 23:18 #13
så mangler du bare at acceptere
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester