在 2 个索引 VB.NET 之间随机混洗数组中的元素
Random shuffling of elements in an array between 2 indexes VB.NET
我正在尝试在一定数量的索引之间随机排列元素。
Dim rng As New Random()
For placeHolder As Integer = min To max Step -1
Dim swapIndex As Integer = rng.Next(min, max)
Dim temp As Object = myList(placeHolder)
myList(placeHolder) = myList(swapIndex)
myList(swapIndex) = temp
Next
其中'min'是最低指数的值,'max'是最高指数的值。然而,每次我尝试时,它似乎都不是随机洗牌的(它总是按字母顺序出现)。
如果min
是最低的而max
是最高的,那么你的循环中不应该有Step -1
。这将导致循环永远不会执行。
试试这个:
Dim rng As New Random()
For placeHolder as Integer = min To max-1 Step 1
Dim swapIndex as Integer = rng.Next(placeHolder +1, max)
Dim temp as Object = myList(placeHolder)
myList(placeHolder) = myList(swapIndex)
myList(swapIndex) = temp
Next
变化?
我将跨过的最大值更改为比末尾小 1,这样您就不会浪费时间尝试将末尾与其自身交换。我还将步骤更改为 +1,因为从您的描述中可以看出 min < max。我将最小随机值更改为占位符 + 1,因为我不想重新交换我已经交换的内容。不过,最后一项更改是可选的。
我正在尝试在一定数量的索引之间随机排列元素。
Dim rng As New Random()
For placeHolder As Integer = min To max Step -1
Dim swapIndex As Integer = rng.Next(min, max)
Dim temp As Object = myList(placeHolder)
myList(placeHolder) = myList(swapIndex)
myList(swapIndex) = temp
Next
其中'min'是最低指数的值,'max'是最高指数的值。然而,每次我尝试时,它似乎都不是随机洗牌的(它总是按字母顺序出现)。
如果min
是最低的而max
是最高的,那么你的循环中不应该有Step -1
。这将导致循环永远不会执行。
试试这个:
Dim rng As New Random()
For placeHolder as Integer = min To max-1 Step 1
Dim swapIndex as Integer = rng.Next(placeHolder +1, max)
Dim temp as Object = myList(placeHolder)
myList(placeHolder) = myList(swapIndex)
myList(swapIndex) = temp
Next
变化? 我将跨过的最大值更改为比末尾小 1,这样您就不会浪费时间尝试将末尾与其自身交换。我还将步骤更改为 +1,因为从您的描述中可以看出 min < max。我将最小随机值更改为占位符 + 1,因为我不想重新交换我已经交换的内容。不过,最后一项更改是可选的。