Avatar billede testpilot_dk Nybegynder
19. februar 2007 - 21:00 Der er 4 kommentarer og
1 løsning

Sortering af multiple elementer

Hej!

Jeg har følgende problemstilling.

Jeg læser x antal records ind fra en fil, hver record putter jeg i et objekt som dette.

    public class OrderLine : IComparable
    {
        private string _menu = "";
        private string _indkob = "";
        private string _varenr = "";
        private bool _type = true;
        public OrderLine(string menu, string indkob, string varenr)
        {
            _menu = menu;
            _indkob = indkob;
            _varenr = varenr;
        }

Disse elementer putter jeg ind i en ArrayListe, denne liste vil jeg gerne have sorteret på _indkob og _varenr.

Jeg har forsøgt med følgende sortering, men den gør det enkeltvis og det resultere i at den ikke sortere filen korrekt.

        public int CompareTo(object obj)
        {
            if (obj is OrderLine)
            {
                OrderLine p2 = (OrderLine)obj;
                if (Type)
                    return _indkob.CompareTo(p2.Indkob);
                else
                    return _varenr.CompareTo(p2.Varenr);
            }
            else
                throw new ArgumentException("Object is not a indkob.");
        }

Håber i har en ide til hvordan jeg kan gører det sådan at min sortering er foretaget på både _indkob og _varenr...
Avatar billede skov_p Praktikant
19. februar 2007 - 22:54 #1
public int Compare(object obj){
if (!obj is OrderLine)
  throw new ArgumentException("Object is not a indkob.");

OrderLine ol = obj as OrderLine;
int res = _indkob.CompareTo(ol.IndKob)==0;
if (res==0)
  return _varenr.CompareTo(ol.Varenr);
else
  return res;
}
Avatar billede skov_p Praktikant
19. februar 2007 - 22:54 #2
Hov det skulle være CompareTo
Avatar billede testpilot_dk Nybegynder
20. februar 2007 - 08:07 #3
Hmm, jeg kan ikke få den til at sortere på begge felter.

        public int CompareTo(object obj)
        {
            if (!(obj is OrderLine))
                throw new ArgumentException("Object is not a indkob.");
           
            OrderLine p2 = obj as OrderLine;
            bool res = Indkob.CompareTo(p2.Indkob) == 0;

            if (Convert.ToInt32(res) == 0)
                return Varenr.CompareTo(p2.Varenr);
            else
                return Convert.ToInt32(res);
        }

Data før sortering
Felt 1                  Felt 2
1240                    12345678
02240                  23456789
1241                    12345678
1240                    45678901

Mine data ser sådan her ud efter jeg har sorteret dem

Felt 1                  Felt 2
1241                    12345678
1240                    12345678
02240                  23456789
1240                    45678901

Jeg forventende at resultatet skal være

Felt 1                  Felt 2
02240                  23456789
1240                    12345678
1240                    45678901
1241                    12345678

Da felt 1 har den største vigtighed!
Avatar billede testpilot_dk Nybegynder
20. februar 2007 - 08:14 #4
Hmm!

Jeg kan få den til at sortere mine resultater så den giver det bagvendte resultat.

Felt 1                  Felt 2
1241                    12345678
1240                    45678901
1240                    12345678
02240                  23456789

Jeg ændrede denne til
            if (Convert.ToInt32(res) != 0)
                return Varenr.CompareTo(p2.Varenr);
            else
                return Convert.ToInt32(res);
Avatar billede skov_p Praktikant
20. februar 2007 - 15:51 #5
Sorry... res skulle være int og ikke bool.

Hvis den sorterer bagvendt skal du vende dit compare statement om

public int CompareTo(object obj)
        {
            if (!(obj is OrderLine))
                throw new ArgumentException("Object is not a indkob.");
           
            OrderLine p2 = obj as OrderLine;
            int res = p2.Indkob.CompareTo(Indkob) == 0;

            if (res == 0)
                return p2.Varenr.CompareTo(Varenr);
            else
                return res;
        }
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