繁体   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