[英]Get random numbers in F#
我在F#中有以下功能:
let randomCh () =
let random = Random()
alph.Chars (random.Next (alph.Length - 1));
此函數每次都返回相同的值。 我在C#中遇到同樣的問題,解決方案很簡單:只創建一個這樣的Random對象:
var rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine(rnd.Next(10));
如何在F#中達到相同的行為:每次獲取隨機值?
那么你的C#代碼沒有定義函數而你的F#沒有定義函數; 你可能在C#中遇到同樣的問題。 您應該從randomCh
函數中重構random
定義,或者在初始化random
之后將randomCh
綁定到函數:
let alph = "abcdefg"
let randomCh =
let random = Random()
fun () -> alph.Chars (random.Next (alph.Length - 1))
printfn "%O" <| randomCh()
printfn "%O" <| randomCh()
就像在C#中一樣,你應該在函數外部創建隨機函數。 這將阻止您在每次調用時創建新的Random
生成器。 默認情況下, Random
使用當前系統時鍾來自行播種 - 如果您使用隨機實例調用函數,快速連續,您可以使用相同的時間戳為隨機播種,從而有效地為您提供相同的序列。
通過將其移出函數,您將重用相同的隨機實例,並避免:
let random = Random()
let randomCh () =
alph.Chars (random.Next (alph.Length - 1));
// Calling randomCh() repeatedly will now give different values each time
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.