我正在尝试用随机数字填充列表,并且我很难获得随机数部分.我现在拥有10次随机数字,我想要的是打印10个不同的随机数
let a = (new System.Random()).Next(1, 1000)
let listOfSquares = [ for i in 1 .. 10->a]
printfn "%A" listOfSquares
Run Code Online (Sandbox Code Playgroud)
任何提示或建议?
Joe*_*ler 37
您的代码只是获取一个随机数并使用十次.
此扩展方法可能很有用:
type System.Random with
/// Generates an infinite sequence of random numbers within the given range.
member this.GetValues(minValue, maxValue) =
Seq.initInfinite (fun _ -> this.Next(minValue, maxValue))
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
let r = System.Random()
let nums = r.GetValues(1, 1000) |> Seq.take 10
Run Code Online (Sandbox Code Playgroud)
ild*_*arn 21
let genRandomNumbers count =
let rnd = System.Random()
List.init count (fun _ -> rnd.Next ())
let l = genRandomNumbers 10
printfn "%A" l
Run Code Online (Sandbox Code Playgroud)
当我编写随机分配器时,我喜欢对分配器的每次调用使用相同的随机数生成器。您可以在 F# 中使用闭包(Joel 和 ildjarn 的答案的组合)来做到这一点。
例子:
let randomWord =
let R = System.Random()
fun n -> System.String [|for _ in 1..n -> R.Next(26) + 97 |> char|]
Run Code Online (Sandbox Code Playgroud)
通过这种方式,Random 的单个实例被“烘焙”到函数中,并在每次调用时重用它。