Avatar billede ahara Nybegynder
20. maj 2006 - 17:25 Der er 1 kommentar og
1 løsning

Sort ArrayList

Hej

Hvis jeg opretter en ArrayList af objekter kan jeg sortere listen efter en variabel i objekterne?

Et eksempel kunne være:

ArrayList der indeholder personer (objekt).

Hver person har en alder (variabel).

Kan man sortere ArrayListen efter personernes alder?

Tak

AHR
Avatar billede driis Nybegynder
20. maj 2006 - 18:03 #1
Ja - for at gøre det, skal person objekterne implementere interfacet IComparable. Dette interface har en CompareTo metode, som du skal implementere for at fortælle sorteringsalgoritmen, hvad den skal sortere på. CompareTo returnerer en int, som skal være under 0 hvis objektet er mindre end det den bliver sammenlignet med, 0 hvis de er lig hinanden og over 0 hvis objektet er større.

Skal objekterne kunne sammenlignes på flere forskellige måder, er det mere oplagt at implementere IComparer interfacet, og give en instans af disse med til Sort funktionen.
Avatar billede driis Nybegynder
20. maj 2006 - 18:09 #2
Simpelt eksempel følger; men prøv også at slå IComparer og IComparable op i MSDN:

using System;
using System.Collections;

namespace Test
{
    class Person : IComparable
    {
        private string name;
        private int age;

        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        public override string ToString()
        {
            return Name;
        }

        ///<summary>
        ///Compares the current instance with another object of the same type.
        ///</summary>
        ///
        ///<returns>
        ///A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance is less than obj. Zero This instance is equal to obj. Greater than zero This instance is greater than obj.
        ///</returns>
        ///
        ///<param name="obj">An object to compare with this instance. </param>
        ///<exception cref="T:System.ArgumentException">obj is not the same type as this instance. </exception><filterpriority>2</filterpriority>
        public int CompareTo(object obj)
        {
            Person other = obj as Person;
            if (other != null)
                return Age - other.Age;
            else
                throw new ApplicationException("Cannot compare to other types than Person");
        }
    }
   
   
    class Program
    {
        static void Main(string []args)
        {
            ArrayList al = new ArrayList();
            al.Add(new Person("Kaj",54));
            al.Add(new Person("Gert",85));
            al.Add(new Person("Karl", 20));
            al.Sort();

            foreach (object o in al)
                Console.WriteLine(o.ToString());
        }
    }
}
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