In .NET heb je de IComparable interface, die een method CompareTo(object) implementeert. Het integer resultaat hiervan geeft aan of het opgegeven object minder (negatief getal), gelijk aan (nul) of groter (positief getal) is dan de parent van de method. De hoogte van het positieve of negatieve getal geeft aan hoeveel kleiner/groter het object is.
Als je online kijkt naar voorbeeldimplementaties van CompareTo, dan wordt altijd 1 veld (bijv. achternaam, ID, leeftijd) betrokken bij de vergelijking.
Echter werk ik voor het testen van pathfinding algorithmen met een 2D coordinatenstelsel. Hierin wil ik 2 instances van het type Coord2D met elkaar kunnen vergelijken:
(code is versimpeld voor het leesgemak, aub niet letten op access modifiers en de argument type van CompareTo)
Zoals je al snapt kan dit false positives geven, want een vergelijking tussen (2, 10) en (6, 6) heeft 0 als uitkomst.
Hoe kan ik dit oplossen? Kan je in een coordinatenstelsel spreken van een gekwantificeerd groter dan/kleiner dan, of is er alleen maar gelijk/ongelijk?
Als je online kijkt naar voorbeeldimplementaties van CompareTo, dan wordt altijd 1 veld (bijv. achternaam, ID, leeftijd) betrokken bij de vergelijking.
Echter werk ik voor het testen van pathfinding algorithmen met een 2D coordinatenstelsel. Hierin wil ik 2 instances van het type Coord2D met elkaar kunnen vergelijken:
(code is versimpeld voor het leesgemak, aub niet letten op access modifiers en de argument type van CompareTo)
C#:
1
2
3
4
5
6
7
8
9
10
| struct Coord2D : IComparable { int X; int Y; int CompareTo(Coord2D comparecoord) { return (X.CompareTo(comparecoord.X) + Y.CompareTo(comparecoord.Y)) } } |
Zoals je al snapt kan dit false positives geven, want een vergelijking tussen (2, 10) en (6, 6) heeft 0 als uitkomst.
Hoe kan ik dit oplossen? Kan je in een coordinatenstelsel spreken van een gekwantificeerd groter dan/kleiner dan, of is er alleen maar gelijk/ongelijk?
Certified smart block developer op de agile darkchain stack. PM voor info.