Collections.shuffle() эквивалентно в vb.net?
Что эквивалентно для java.util.Collections.shuffle()
метод для vb.net? Я не нашел ничего похожего на MSDN. Помощь очень ценится.
1 ответ
Решение
Насколько я могу судить, встроенной функции.NET нет, но общий эквивалент легко написать с помощью Linq:
Function Shuffle(Of T)(collection As IEnumerable(Of T)) As List(Of T)
Dim r As Random = New Random()
Shuffle = collection.OrderBy(Function(a) r.Next()).ToList()
End Function
Вызов этой функции назначает случайное значение каждому элементу во входном списке, а затем сортирует по этому случайному числу, возвращая новый (перемешанный) список.
Если коллекция является массивом или происходит от IList
более эффективный подход может заключаться в использовании алгоритма Фишера-Йейтса для перетасовки списка на месте:
Sub Shuffle(Of T)(list As IList(Of T))
Dim r As Random = New Random()
For i = 0 To list.Count - 1
Dim index As Integer = r.Next(i, list.Count)
If i <> index Then
' swap list(i) and list(index)
Dim temp As T = list(i)
list(i) = list(index)
list(index) = temp
End If
Next
End Sub