创建随机数

Bru*_*uie 3 c#

是否可以从c#中的数字选择中创建一个随机数.

例如,我有一个1-90的数字数组,一旦数字被称为该数字的变化.因此,我只想生成该属性未更改的数字.因此,这将仅随机调用1到90之间的数字.

我使用循环完成了这个,但只是想要一个quiker和更干净的方法.

我目前的代码是:

    public object GenerateNumber()
    {
        bool alreadyCalled = false;
        while (!alreadyCalled)
        {
           Random randomNumber = new Random(System.DateTime.Now.Millisecond);
            int RandomNumberCalled = randomNumber.Next(1, 91);             


            if (Numbers.ToList().Find(x => x.Number == RandomNumberCalled).IsCalled != null)
            {    

             // change number to is called and do other things. 

            }
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

And*_*rey 10

您应该使用List和删除所选项目,然后减少上边框.或者更好的解决方案是复制数组并将其随机播放,然后顺序访问将为您提供随机数.或者使用Knuth shuffling(检查评论).

  • 如果你想要一个更快的算法,Knuth Shuffling可以在每个变量的O(1)时间内完成,只需要按照请求一次洗牌一个值. (2认同)

Ant*_*ram 6

在您执行的迭代次数越多,找到未使用的值将变得越来越"难",因为最终找到已使用的值的概率将接近100%.还有其他选择.其中一种可能性是在尝试提取任何数字之前对源数组进行随机排序,然后按顺序将它们剥离.