Avatar billede 2c Nybegynder
21. november 2005 - 13:31 Der er 4 kommentarer og
1 løsning

Sorter efter dato i arraylist

Hej,

Jeg har en arraylist bestående af et antal ens objekter, som alle har en dateTime som property. Hvordan sorterer man arraylisten efter objekternes datetime?
Avatar billede spif2001 Nybegynder
21. november 2005 - 13:34 #1
Brug en SortedList i stedet og implementér IComparer interfacet i din objekt klasse.
Avatar billede dr_chaos Nybegynder
21. november 2005 - 13:34 #2
du kan bruge sort().
arraylist al = new arraylist();
al.sort.
hvad de skriver om sort på :
www.functionx.com/csharp/winprog/collections/arraylist.htm+c%23+arraylist+sort+datetime&hl=da" target="_blank">http://66.249.93.104/search?q=cache:4YV7T475EBoJ:www.functionx.com/csharp/winprog/collections/arraylist.htm+c%23+arraylist+sort+datetime&hl=da

public virtual void Sort();

If the items in the list are made of strings, this method would arrange them in alphabetical order. If the items are numeric values, calling this method would arrange the list in incremental order. If the list is made of dates, when this method is called, the compiler would refer to the options set in the Regional Settings of the Control and arrange them accordingly in chronological order.
Avatar billede arne_v Ekspert
21. november 2005 - 13:54 #3
al.Sort();

virker hvis ArrayListen indeholder DateTime objekter men ikke hvis den indeholder
objekter som indeholder en DateTime

----

så skal du enten implementere IComparable i den klasse som er i ArrayList og
indeholder DateTime og i CompareTo sammenligne på DateTime

eller lave en tredie klasse som implementerer IComparer og har en Compare
metode som sammenligner på DateTime

----

et gammelt eksempel (dog ikke med DateTime men ideen skulel fremgå):

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 2c Nybegynder
21. november 2005 - 14:13 #4
Tak, det virker arne_v.

Smider du et svar.
Avatar billede arne_v Ekspert
21. november 2005 - 14:30 #5
gerne
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