Monger
2007-12-13, 17:15:53
Hallo!
Ich habe eine Reihe von Datensätzen, die nicht unbedingt sortierbar sein müssen, aber die ich gerne gut durchmischen würde. Da habe ich mir gedacht: müsste das nicht mit einem Comparator ganz einfach gehen?
Also habe ich mir folgendes geschrieben (vollklassifizierte Namen leicht gekürzt, bitte nicht töten für die VB Syntax!):
Class StringShuffle
implements IComparer(of String)
private shared readOnly generator as new Random()
public function Compare(x as String, y as string) as Integer implements IComparer(of String).Compare
if x.equals(y) then return 0
dim val as integer = generator.next(2)
if val = 0 then return 1
return -1
End Function
End Class
Wenn ich jetzt eine List von Strings nur oft genug sortiere, kriege ich sporadisch die folgende Exception:
"IComparer (or the IComparable methods it relies upon) did not return zero when Array.sort called x.compareTo(x). x: 'CharTest' x's type: 'String' "
Mir ist schon klar, dass ich den IComparer arg mißbraucht habe, aber was genau ist eigentlich schief gelaufen? Und wie könnte sonst ein "Shuffle" aussehen?
Ich habe eine Reihe von Datensätzen, die nicht unbedingt sortierbar sein müssen, aber die ich gerne gut durchmischen würde. Da habe ich mir gedacht: müsste das nicht mit einem Comparator ganz einfach gehen?
Also habe ich mir folgendes geschrieben (vollklassifizierte Namen leicht gekürzt, bitte nicht töten für die VB Syntax!):
Class StringShuffle
implements IComparer(of String)
private shared readOnly generator as new Random()
public function Compare(x as String, y as string) as Integer implements IComparer(of String).Compare
if x.equals(y) then return 0
dim val as integer = generator.next(2)
if val = 0 then return 1
return -1
End Function
End Class
Wenn ich jetzt eine List von Strings nur oft genug sortiere, kriege ich sporadisch die folgende Exception:
"IComparer (or the IComparable methods it relies upon) did not return zero when Array.sort called x.compareTo(x). x: 'CharTest' x's type: 'String' "
Mir ist schon klar, dass ich den IComparer arg mißbraucht habe, aber was genau ist eigentlich schief gelaufen? Und wie könnte sonst ein "Shuffle" aussehen?