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?
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);
}
}