在2个索引VB.NET之间随机改组数组中的元素

时间:2015-02-10 18:43:15

标签: vb.net for-loop random arraylist shuffle

我正在尝试在一定数量的索引之间混洗元素。

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'是最高索引的值。然而,每次我尝试它似乎都没有随机洗牌(它总是按字母顺序排列)。

2 个答案:

答案 0 :(得分: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<最多来自您的描述。我将最小随机值更改为占位符+ 1,因为我不想重新交换我已经交换的内容。最后一次更改是可选的。

答案 1 :(得分:0)

如果min最低且max最高,则您的循环中不应包含Step -1。这将导致循环永远不会执行。