簡體   English   中英

獲取F#中的隨機數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM