Avatar billede jps6kb Novice
30. april 2009 - 15:42 Der er 3 kommentarer og
1 løsning

Sortere ArrayList med objekter

Hey,

Hvordan sorterer jeg en ArrayList indeholdende nogle objekter af en klasse med forskellige variabler?

F.eks. en liste med Person objekter.
Jeg vil gerne sortere på fodselsdag.

Hvordan gør jeg nemmest det?
Avatar billede arne_v Ekspert
30. april 2009 - 15:48 #1
Til inspiration:

using System;
using System.Collections;

public class Foobar : IComparable
{
    private int a;
    private string b;
    public Foobar() : this(0, "")
    {
    }
    public Foobar(int a, string b)
    {
        this.a = a;
        this.b = b;
    }
    public int A
    {
        get
        {
            return a;
        }
        set
        {
            a = value;
        }
    }
    public string B
    {
        get
        {
            return b;
        }
        set
        {
            b = value;
        }
    }
    public int CompareTo(object o)
    {
        return (a - ((Foobar)o).A);
    }
    public override string ToString()
    {
        return ("(" + a + "," + b + ")");
    }
}

public class FoobarAComparer : IComparer
{
    int IComparer.Compare(Object o1, Object o2)
    {
        return (((Foobar)o1).A - ((Foobar)o2).A);
    }
}

public class FoobarRevAComparer : IComparer
{
    int IComparer.Compare(Object o1, Object o2)
    {
        return -(((Foobar)o1).A - ((Foobar)o2).A);
    }
}

public class FoobarBComparer : IComparer
{
    int IComparer.Compare(Object o1, Object o2)
    {
        return (((Foobar)o1).B.CompareTo(((Foobar)o2).B));
    }
}

public class FoobarRevBComparer : IComparer
{
    int IComparer.Compare(Object o1, Object o2)
    {
        return -(((Foobar)o1).B.CompareTo(((Foobar)o2).B));
    }
}

class ManySort
{
    private static void print(string descr, ArrayList list)
    {
        Console.Write(descr + ": [");
        foreach(object o in list)
        {
            Console.Write(o);
        }
        Console.WriteLine("]");
    }
    public static void Main(string[] args)
    {
        ArrayList list = new ArrayList();
        list.Add(new Foobar(5, "AAAAA"));
        list.Add(new Foobar(4, "BBBB"));
        list.Add(new Foobar(3, "CCC"));
        list.Add(new Foobar(2, "DD"));
        list.Add(new Foobar(1, "E"));
        print("Original", list);
        list.Sort();
        print("After natural sort (= sort on A)", list);
        list.Sort(new FoobarRevAComparer());
        print("After reverse sort on A", list);
        list.Sort(new FoobarAComparer());
        print("After sort on A", list);
        list.Sort(new FoobarBComparer());
        print("After sort on B", list);
        list.Sort(new FoobarRevBComparer());
        print("After reverse sort on B",list);
    }
}
Avatar billede arne_v Ekspert
30. april 2009 - 15:50 #2
Med nyere .NET versioner boer du bruge List<Person> fremfor ArrayList. Og der er ogsaa mulighed for LINQ .OrderBy() !
Avatar billede arne_v Ekspert
30. april 2009 - 15:51 #3
I 3.5 kan du simpelt:

List<Person> lst = ...;
...
lst = lst.OrderBy((p) => p.BirthDay);
Avatar billede arne_v Ekspert
05. juli 2009 - 18:23 #4
OK ?
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



IT-JOB

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS

Netcompany A/S

Test Specialist

Unik System Design A/S

Head of Internal IT