对于循环推进太快而不正确生成随机字符串

时间:2016-08-11 22:52:26

标签: c# for-loop random

所以我编写了一个快速程序,用于测试在foreach语句中检查布尔值与在循环外部的条件语句中检查布尔值之间的差异(在处理速度方面)。为了测试这个,我创建了一个函数生成随机字符串并将它们添加到列表中,但生成字符串的for循环似乎进展太快而不会在重复中生成不同的字符串。为了解决这个问题,我添加了Thread.Sleep(15)(15毫秒似乎是每次重复生成不同字符串所需的最小值)。

我的问题是:是否可以在没有Thread.Sleep(15)的情况下解决此问题?每次重复之间等待15毫秒就会使程序花费更多的时间来运行,这使得它的目的非常不实用(如果我想得到统计相关的数据我必须为每个选项运行大约一万次("好"以及"坏"方式))。这是问题的for循环:

for (int i = 0; i < 1000; i++) {

                var stringChars = new char[8];
                var random = new Random();

                for (int n = 0; n < stringChars.Length; n++)
                {
                    stringChars[n] = chars[random.Next(chars.Length)];
                }

                var finalString = new String(stringChars);
                data.Add(finalString);
                Thread.Sleep(15);
        }

1 个答案:

答案 0 :(得分:3)

您遇到的问题是,每次迭代循环时都要重新创建Random类。

这是一个问题的原因是因为Random类的默认种子是当前系统时间戳,在重复迭代时,它可能是相同的值。

Random循环之外创建for将确保按照您的预期生成pseduo-random序列。

试试这个:

var random = new Random();

for (int i = 0; i < 1000; i++) {
    var stringChars = new char[8];

    for (int n = 0; n < stringChars.Length; n++)
    {
        stringChars[n] = chars[random.Next(chars.Length)];
    }

    var finalString = new String(stringChars);
    data.Add(finalString);
}