如何在 C# 中随机化种子 [重复]

Posted

技术标签:

【中文标题】如何在 C# 中随机化种子 [重复]【英文标题】:How to randomize seed in C# [duplicate] 【发布时间】: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

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

【问题讨论】:

【参考方案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 实例。

以上是关于如何在 C# 中随机化种子 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中的石头、纸、剪刀游戏中随机化数组中的变量? [复制]

随机化一个整数数组[重复]

如何在 C# 中以相同的方式随机化/洗牌两个数组

C# Random 生成不重复随机数

在c中随机化一维数组中的序列[重复]

C# Random 生成不重复随机数