在 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,因为我不想重新交换我已经交换的内容。不过,最后一项更改是可选的。