2010-10-13 234 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