Avatar billede backgammon Nybegynder
23. marts 2006 - 16:08 Der er 7 kommentarer og
3 løsninger

Sortere en arraylist

jeg har en klasse

public class user
{
name;
birthday
...
}

Objekter af user klassen bliver gemt i en arraylist. Men jeg vil godt have det sådan at man kan sortere data i arraylisten. Så dem har fødseldags først også ligger i topppen af listen eller omvendt.
Avatar billede arne_v Ekspert
23. marts 2006 - 16:18 #1
lader klassen implementere IComparable
Avatar billede dr_chaos Nybegynder
23. marts 2006 - 17:28 #2
Et simpelt eksempel :
using System;

class Employee:IComparable
{
  private int Id;
  private string Name;

  public Employee(int id,string name)
  {
    this.Id=id;
    this.Name=name;
  }

  public int CompareTo(object obj)
  {
    Employee temp=(Employee)obj;
    if(this.Id>temp.Id)
    {
      return 1;
    }
    else
    {
      if(temp.Id==this.Id)
        return 0;
      else
        return -1;
    }
  }

  public static void Main()
  {
    Employee[] employees=new Employee[5];
    Console.WriteLine("Before Sort:");
    for(int i=0;i<employees.Length;i++)
    {
      employees[i]=new Employee(5-i,"Employee#" + i);
      Console.Write(employees[i].Id + ",");
    }
    Console.WriteLine();

    Array.Sort(employees);
    Console.WriteLine("After Sort:");
    for(int i=0;i<employees.Length;i++)
    {
      Console.Write(employees[i].Id + ",");
    }
    Console.WriteLine();
  }
}
Avatar billede snepnet Nybegynder
23. marts 2006 - 18:25 #3
blot en lille kommentar til eksemplet... alle valuetyper implementerer IComparable, så der er ingen grund til at lave sammenligningen selv:

public int CompareTo(object obj)
{
  Employee e = obj as Employee;
  // fejl hvis e er null
  return this.Id.CompareTo(e.Id);
}

mvh
Avatar billede backgammon Nybegynder
24. marts 2006 - 09:42 #4
hej snepnet det er en nyttig information som du kom med. Er det så muligt at sortere filer påbaggrund af deres oprettelsesdato :

DirectoryInfo directory = new DirectoryInfo(Folder);
FileInfo[] fileinfo = directory.GetFiles("user");
Array.Sort(fileinfo);
Avatar billede snepnet Nybegynder
24. marts 2006 - 09:53 #5
du kan lave din egen comparer:

public class FileDateComparer : IComparer
{
  public int Compare(object x, object y)
  {
    FileInfo f1 = x as FileInfo;
    FileInfo f2 = y as FileInfo;

    Debug.Asser(f1 != null);
    Debug.Asser(f2 != null);

    return f1.CreationTime.CompareTo(f2.CreationTime);
  }
}

og så kan du sortere sådan her:

DirectoryInfo directory = new DirectoryInfo(Folder);
FileInfo[] fileinfo = directory.GetFiles("user");
Array.Sort(fileinfo, new FileDateComparer());

mvh
Avatar billede backgammon Nybegynder
24. marts 2006 - 10:15 #6
takker det svar kunne jeg got bruge.... hvis du kommer med et svar giver jeg point
Avatar billede snepnet Nybegynder
24. marts 2006 - 11:02 #7
vi er vist flere der skal lægge svar her :o)
mvh
Avatar billede backgammon Nybegynder
25. marts 2006 - 07:17 #8
ok ... så lader jeg spm være åbent lidt endnu.... så arne og dr chaos ka komme med et svar oså
Avatar billede dr_chaos Nybegynder
25. marts 2006 - 08:55 #9
svar :)
Avatar billede arne_v Ekspert
25. marts 2006 - 15:49 #10
.
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