2010-10-13 189 views
3

我有一个函数使用随机数字来生成它的输出。我希望能够用长字符串为这些随机数字播种;只要字符串相同,随机数字序列将是相同的。这主要是为了测试目的,但也是为了重复性。从字符串生成随机序列

我计划创建一个就像一个包装类的内置System.Random类构造函数排序是这样的:

MyRandom mr = new MyRandom(100, "This is a really long string..."); 

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

如何将长字符串转换为随机数字列表。我考虑过把字符串的长度和数字n(在这个例子中是100)的距离。然后细分字符串并在每个段上调用散列。

这是一个合理的方式来做到这一点,或者是否有另一种更好的方法?

回答

5

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

如果你想使用string值因为某些原因初始化Random,那么你可以只使用new Random(str.GetHashCode())

0

Java程序员在这里..

为什么不直接与种子字符串的哈希码随机数生成器,并使用它像正常吗?

6

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

Random rnd = new Random("Your string".GetHashCode()); 
Console.WriteLine(rnd.Next()); 

这将始终产生随机数的相同的序列,你基本上用字符串,而散列码播种将始终保持同为相同的字符串。

+3

'GetHashCode()'不总是返回相同的数字。如果重新启动应用程序,该值可能会更改。 – jasdefer 2016-09-14 10:35:06