开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# 随机

在本文中,我们展示了如何在C#中使用内置的Random类生成随机值。

Random类表示一个伪随机数生成器,它是一种生成满足特定统计随机性要求的数字序列的算法。

随机数生成器

随机数生成器(RNG)生成一组值,这些值在外观上不显示任何可区分的模式。随机数生成器分为两类:硬件随机数生成器和伪随机数生成器。硬件随机数生成器被认为可以产生真正的随机数。伪随机数生成器根据软件算法生成值;他们产生看起来随机的值。但如果算法已知,这些值是确定性的并且可以重现。

随机生成器用于赌博、游戏、模拟或密码学。

为了改进伪随机数生成器,操作系统使用从设备驱动程序、用户输入延迟或从一个或多个硬件组件收集的环境噪声。这是加密安全伪随机数生成器的核心。

种子

种子是初始化随机数生成器的值。随机数生成器通过对先前值执行某些操作来生成值。当算法开始时,种子是生成器运行的初始值。生成器最重要和最困难的部分是提供接近真正随机数的种子。

var rnd = new Random();

此构造函数使用默认种子创建随机数生成器。

C#随机数

在第一个示例中,我们生成了一些随机数。

var rand = new Random();

Console.WriteLine(rand.NextDouble());
Console.WriteLine(rand.NextInt64());

var buf = new byte[8];
rand.NextBytes(buf);

Console.WriteLine(string.Join(" ", buf));

该示例生成并打印随机双精度数、整数和字节。

var rand = new Random();

创建了Rando类的新实例。

Console.WriteLine(rand.NextDouble());

NextDouble方法返回一个大于或等于0.0且小于1.0的随机浮点数。

Console.WriteLine(rand.NextInt64());

NextInt64方法返回一个非负随机整数。

var buf = new byte[8];
rand.NextBytes(buf);

我们使用NextBytes方法创建一个随机字节数组;它用随机数填充指定字节数组的元素。

$ dotnet run
0.0746532268944834
7374871010421669053
149 132 170 234 101 204 104 37

C#随机下一步

Next方法返回一个随机整数。我们可以指定随机数的下限和上限。

一共有三个重载方法:

  • Next-返回一个非负随机整数
  • Next(Int32)-返回一个低于最大限制的非负随机整数
  • Next(Int32,Int32)-返回指定范围内的随机整数
var rand = new Random();

Console.WriteLine(rand.Next());
Console.WriteLine(rand.Next(5));
Console.WriteLine(rand.Next(10, 20));

该示例打印三个随机数。

$ dotnet run
741804443
3
11

C#选择随机元素

在下一个示例中,我们从集合中随机选择一个元素。

var rand = new Random();

var vals = new List<int> {1, 2, 3, 4, 5, 6, 7, 8};

var r1 = vals[rand.Next(vals.Count)];
var r2 = vals[rand.Next(vals.Count)];

Console.WriteLine(r1);
Console.WriteLine(r2);

我们从整数列表中随机打印两个元素。因此,上限是非包容性的;我们没有得到超出范围的异常。

$ dotnet run
5
2

C#随机播放列表

在下面的例子中,我们打乱列表。

var rng = new Random();

var vals = new List<int> { 1, 2, 3, 4, 5, 6 };
var words = new List<string> { "sky", "blue", "war", "toy", "tick" };

Shuffle<int>(vals);
Shuffle<string>(words);

foreach (var e in vals)
{
    Console.Write($"{e} ");
}

Console.WriteLine("\n-----------------------");

foreach (var e in words)
{
    Console.Write($"{e} ");
}

Console.WriteLine();

void Shuffle<T>(IList<T> vals)
{
    int n = vals.Count;

    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);

        T value = vals[k];

        vals[k] = vals[n];
        vals[n] = value;
    }
}

在示例中,我们创建了一个通用的Shuffle方法,它随机重新排列列表的元素。

$ dotnet run
2 1 3 4 6 5 
-----------------------
blue war sky tick toy 

在本文中,我们使用C#语言生成了随机值。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# 随机

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏