F#创建字母和数字的随机字符串

Dev*_*ife 2 f#

我的以下代码有问题。我正在尝试创建字母和数字的随机字符串。下面的代码有效,但是每个会话只能创建1个随机字符串,因此,如果我再次调用randomNum,它将仍然保留创建的第一个随机字符串。

let randomNum(len : int) =

    let rand = new System.Random()
    let mutable str = ""
    let chars = "ABCDEFGHIJKLMNOPQRSTUVWUXYZ0123456789"
    let mutable count = 0

    for i in 1 .. len do
        count <- (rand.Next() % 36)

        str <- String.concat "" [str; chars.[count].ToString()]

    str
Run Code Online (Sandbox Code Playgroud)

有谁知道每次调用randomNum时创建随机字符串的简单方法。

谢谢

pol*_*ran 5

您可以使用更惯用的语法来做到这一点:

let randomStr = 
    let chars = "ABCDEFGHIJKLMNOPQRSTUVWUXYZ0123456789"
    let charsLen = chars.Length
    let random = System.Random()

    fun len -> 
        let randomChars = [|for i in 0..len -> chars.[random.Next(charsLen)]|]
        new System.String(randomChars)
Run Code Online (Sandbox Code Playgroud)

我们将chars数组,数组的长度和Random生成器保存在一个封闭符中,然后返回一个函数,该函数采用所需的长度来构建字符串。

调用函数:

let randomString10 = randomStr(10)
Run Code Online (Sandbox Code Playgroud)