我正在使用此代码从列表中选择一个随机元素:
var rand = new Random();
var i = rand.Next(words.Count);
keyword = words[i].keyword;
这是实现这一目标的最佳方式还是有更好的方法可以使用?我特别关注的是这是完全随机的吗?
答案 0 :(得分:4)
如果要创建多个随机数,则应保留Random实例并重复使用它。 如果您创建新实例的时间太近,它们将生成与随机生成器从系统时钟播种的相同系列的随机数。
每次执行新的Random()时都会初始化。这意味着在紧密循环中,您可以多次获得相同的值。您应该保留一个Random实例并继续在同一个实例上使用Next。
希望这有帮助!!!
答案 1 :(得分:2)
这将是绝对不随意的,每当您需要一个号码时,您必须不创建一个新的Random
实例。这样做完全破坏了生成器的统计属性。
即便如此,你也不会达到完美的随机性(你需要外部硬件),但它应该满足随机性的所有主要属性。
答案 2 :(得分:0)
将此行用于单次初始化:var rand = new Random();
使用以下代码每次都会生成新号码。
var i = rand.Next(words.Count);
keyword = words[i].keyword;
希望它会对你有所帮助。