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 om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for 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.