【问题标题】:How to randomize seed in C# [duplicate]如何在 C# 中随机化种子 [重复]
【发布时间】:2016-12-30 13:30:20
【问题描述】:

我需要在 C# 中生成随机 int。我正在使用时钟时间来设置种子。但是,由于 rnd.Next() 函数可能需要不到一毫秒的时间,如果必须生成整数列表,这将不起作用。

        for( int i=0; i<5; i++) {
            int max_val = 10; // max value
            var rnd = new Random(DateTime.Now.Millisecond);
            int randind = rnd.Next(0, max_val);
            Console.WriteLine(randind);
        }

输出:
1 5 5 5 5

如何以一种干净的方式随机化种子而不增加难看的睡眠?

【问题讨论】:

    标签: c# random


    【解决方案1】:

    在循环之外创建您的Randomobject,并且不要提供种子参数——我们会为您挑选一个。通过将其从循环中取出,rnd.Next() 无论如何都会给你一个随机序列。

       var rnd = new Random();     
       for( int i=0; i<5; i++) {
            int max_val = 10; // max value
            int randind = rnd.Next(0, max_val);
            Console.WriteLine(randind);
        }
    

    【讨论】:

    • 太棒了!非常感谢!
    • 没问题!如果您对答案感到满意,您可以接受答案吗?
    【解决方案2】:

    Guid 对象每次都保证不同的结果。你可以这样做:

    ... 新随机(Guid.NewGuid().GetHashCode())

    【讨论】:

    • guid 很昂贵,并且哈希码不能保证是唯一的,所以你最好忽略种子构造函数,而不是一遍又一遍地构造 Random 实例。
    猜你喜欢
    • 2018-05-30
    • 2016-04-25
    • 1970-01-01
    • 2022-08-03
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多