PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .NET shuffle Modus?


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?

Trap
2007-12-13, 17:28:23
http://en.wikipedia.org/wiki/Knuth_shuffle#The_modern_algorithm

Ist schneller und mehr zufällig.

Monger
2007-12-14, 10:05:34
Okay, so simpel der Algorithmus auch ist, ich wäre da jetzt nicht von selbst draufgekommen.

Danke! Funktioniert wunderbar.