2011-08-04 22 views
1

我想創建一個洗好的一組整數這樣的:如何生成2個數字之間的混洗整數列表?

  1. 由於相同的種子,洗牌將每次
  2. 當我遍歷相同,將使用在洗好的牌組的每個數字恰好一次重演之前
  3. 將工作大集(我想0和2十億之間的所有數字)
  4. 將一系列之間產生,例如,100〜150

這個選項給出了一個很好的解決方案,如果你想要,比如0和指定數字之間的所有數字:Generating Shuffled Range Using a PRNG Rather Than Shuffling

任何想法?

+0

爲什麼你不使用你比較的解決方案,並將結果轉移到最小值?因此,對於100-150,這就像'GenerateSequence(50).Select(i => i + 100)'。 – svick

回答

1

您可以使用與鏈接問題完全相同的算法。只需生成0到upperBound - lowerBound + 1之間的數字並將lowerBound添加到結果中即可。

例如(用代碼鏈接的問題):

var upper = 5; 
var lower = 3; 
foreach (int n in GenerateSequence(upper-lower+1)) 
{ 
    Console.WriteLine(n+lower); 
} 

如果你想序列重複(洗牌不同的每次),你可以添加一個while (true)周圍的迭代方法體。

相關問題