从字符串生成随机序列

Sha*_*awn 3 c# random

我有一个使用随机数生成其输出的函数.我希望能够用长字符串播种这些随机数; 只要字符串相同,随机数序列就会相同.这主要用于测试目的,也用于重复性.

我打算创建一个包装类,它类似于内置的System.Random类,其构造函数类似于:

MyRandom mr = new MyRandom(100, "This is a really long string...");
Run Code Online (Sandbox Code Playgroud)

这会生成一个内部数字列表,这样当调用mr.Next()时,它只返回列表中的下一个条目.当它达到100时,列表只是包装.我希望能够调用.NextDouble().这并不意味着任何高性能,我只是希望能够生成随机列表并再次使用它.

如何将长字符串转换为随机数列表.我已经考虑过用字符串的长度和潜水数n(在这种情况下为100).然后细分字符串并在每个段上调用哈希.

这是一种合理的方法吗?还是有另一种更好的方法?

ste*_*nar 6

听起来有点奇怪.你在找这样的东西吗?

Random rnd = new Random("Your string".GetHashCode());
Console.WriteLine(rnd.Next());
Run Code Online (Sandbox Code Playgroud)

这将始终生成相同的随机数序列,因为您实际上是使用字符串播种,而哈希码对于相同的字符串始终保持相同.

  • `GetHashCode()`并不总是返回相同的数字.如果重新启动应用程序,该值可能会更改. (4认同)

Tom*_*cek 5

您并不需要长输入来初始化Random,以便生成相同的随机值序列(对于相同的调用序列).如果您只使用整数作为参数,那么Random将使用整数初始化其内部状态(称为种子),并且随机生成的数字序列将始终相同(对于相同的种子).

如果由于某种原因想要Random使用string值初始化,那么您可以使用new Random(str.GetHashCode()).

  • 不保证“GetHashCode”在进程重新启动时返回相同的结果。 (2认同)