使用linq用随机数填充数组

时间:2014-06-09 14:00:20

标签: vb.net

我对linq很新,并希望做到以下几点。创建一个包含11个元素的数组(工作正常)包含20到35之间的随机数,没有重复。我的代码只给出了0到9之间的随机数。

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Dim r As New Random

    'Create an array of exclusive numbers from 0 to 10
    Dim exclusive_numbers() As Integer = Enumerable.Range(0, 10).OrderBy(Function(n) r.Next(20, 35)).ToArray
    For x = 0 To 10
       MsgBox (exclusive_numbers(x).ToString )
    Next
End Sub

我真的很想做这项工作,但我担心此时此事已经过去了。任何帮助,想法或工作代码将不胜感激。 谢谢 乔治

1 个答案:

答案 0 :(得分:5)

   Dim r As New Random()
   Dim exclusive_numbers As Integer() = Enumerable.Range(20, 16).OrderBy(Function(n) r.Next).Take(11).ToArray()

将生成在20-> 20 + 16-1 =>范围内的11个随机数。 20 =→35

你的原因是0-9仍然是因为那是你指定的可枚举数字范围(从0开始,生成10个整数,然后随机排序)

@JoelCoehoorn下面的注释,Random.Next()的顺序可能会导致异常。另一种方法是通过Guid.NewGuid()订购。

Enumerable.Range(20, 16).OrderBy(Function(t) Guid.NewGuid()).Take(11)