保证特定数字是随机数集

时间:2015-12-03 17:52:32

标签: .net vb.net random

我编写的代码随机生成数字并将其存储在哈希集中以防止重复。但是,每次运行生成器时,我都需要生成一个特定的数字以及其他一些数字,然后以随机顺序存储所有值,包括我想要生成的数据。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

一系列没有重复的值通常意味着一个随机播放,因为值可以在一系列随机值中重复。我不知道值的范围是什么,所以我猜。这比循环中的哈希集更容易:

' use the same random object over and over
Private rng As New Random()
...
Dim MustHave As Int32 = 42

Dim values = Enumerable.Range(1, 100).
      OrderBy(Function(r) rng.Next()).
      Take(10).ToArray()

' it might already be in the set, so check
If values.Contains(MustHave) = False Then
    values(rng.Next(0, values.Length)) = MustHave
End If

第一部分的说明:

  • Enumerable是一个类型,包含总和,平均等共享方法。代码使用Range创建从1开始的100个值。这是值集的来源。
  • 接下来,使用创建的Random对象
  • 以随机顺序放置内容
  • Take是另一种返回IEnumerable元素的n方法;这里,10。
  • 最后,将它们(幸运10)放入数组

最后一步检查您想要显示的值是否已经存在,然后再将其放入随机位置。

使用OrderBy将它们按随机顺序排列通常是一个简单 - 足够好的随机播放。或者,使用Fisher-Yates shuffle shown here。它更长,但效率更高。