在本文中,我们展示了如何在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#教程。