26. september 2005 - 23:23Der er
6 kommentarer og 1 løsning
Sortere egen klasse - IComparable
Jeg har en klasse, BandMatch, som får tildelt nogen point. Disse points kan hentes ud med TotalPoint. En arraylist indeholder nu x antal BandMatch, og nu vil jeg gerne kunne sortere dem efter det tal som TotalPoint retunere. Jeg har forsøgt med:
public class BandMatch : IComparable { String _BandNavn; int _BandId; int _Inspiration, _Beskrivelse;
public int CompareTo(BandMatch rhs) { return this.TotalPoint.CompareTo(rhs.TotalPoint); }
public BandMatch(String BN, int Id) { _BandNavn=BN; _BandId=Id; _Inspiration=0; _Beskrivelse=0; } ...
men får hele tiden fejlen: CS0535: 'ASP.SearchSound_aspx.BandMatch' does not implement interface member 'System.IComparable.CompareTo(object)'
Så...1: Hvad er det der er galt og 2: vil det overhovedet virke? Jeg har ikke arbejdet med dette før
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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); } }
Hej...Det virker jo fantastisk...SKAL det være: public int CompareTo(object rhs) for troede egentligt det var fint bare der var CompareTo, som det jeg havde først?
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.