我编写的代码随机生成数字并将其存储在哈希集中以防止重复。但是,每次运行生成器时,我都需要生成一个特定的数字以及其他一些数字,然后以随机顺序存储所有值,包括我想要生成的数据。
最好的方法是什么?
答案 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。最后一步检查您想要显示的值是否已经存在,然后再将其放入随机位置。
使用OrderBy
将它们按随机顺序排列通常是一个简单 - 足够好的随机播放。或者,使用Fisher-Yates shuffle shown here。它更长,但效率更高。