替代Random.Next方法

时间:2019-01-08 21:13:55

标签: vb.net

在Visual Basic中,有没有一种方法可以让我从数字列表中选择一个随机数,而不是选择两个数字之间的随机数?

换句话说,我想要一个类似Random().Next(1, 3, 4, 6, 7)的东西,它将从那些数字中选择一个随机数(因此,选择2是不可选项)

我看过here,但似乎找不到任何东西。

3 个答案:

答案 0 :(得分:0)

尝试以下操作:

Imports System

Public Module Module1
Private Function NextRandom(ParamArray numbers() As Integer) As Integer
    Dim Result As Integer = Integer.MinValue

    If numbers.Length > 0 Then
        Dim rnd As New Random
        Dim i As Integer = rnd.Next(0, numbers.Length)
        Result = numbers(i)
    End If

    Return Result
End Function

Public Sub Main()
    Console.writeline("Your next number is: {0}", NextRandom(1, 3, 5, 6, 7, 8, 9))
End Sub
End Module

更多信息和示例here

代码here

的工作示例

希望这会有所帮助。

答案 1 :(得分:0)

将列表定义为数组:

<steps>

然后使用标准的random.next生成数组的索引:

Dim List = New Integer() {Your numbers here}

然后将您的随机数定义为与数组索引相对应的数字:

Dim generator As New Random
Dim index As Integer
index = generator.Next(0, List.length)

答案 2 :(得分:0)

如果您只希望列表中的每个值一次,则只需随机排列列表即可。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim lst As New List(Of Integer) From {1, 3, 4, 6, 7}
    Dim shuffledList As List(Of Integer) = lst.OrderBy(Function(i) Rnd.Next()).ToList()
    For Each i In shuffledList
        Debug.Print(i.ToString)
    Next
End Sub

每次单击按钮都会得到不同的订单。