<Extension()> Function Shuffle(Of T)(ByRef items As IEnumerable(Of T), Optional iterations As Integer = 1, Optional seed As Integer = 0) As IEnumerable(Of T) Randomize() Dim r = If(seed = 0, New Random, New Random(seed)) If iterations > 3 Then iterations = 3 For i = 0 To iterations - 1 items = From e In items Order By r.Next Next Return items End FunctionExample:
myList.Shuffle() 'Shuffles the List exactly one time. Already good enough for most cases. myList.Shuffle(2) 'Gives the List two shuffles. myList.Shuffle(100) 'Shuffles are limited to 3 times, even if more are specified. More shuffles are just not useful anymore. myList.Shuffle(, 1234) 'Uses 1234 as a seed value for the random number generator instead of .NETs default tickcount seed value.