2011-05-19 100 views
6

我想用隨機數填充一個列表,並且有難以得到隨機數的部分。我現在所打印的是一個隨機數字10次,我想要打印出10個不同的隨機數字F#得到一個隨機數列表

let a = (new System.Random()).Next(1, 1000) 


    let listOfSquares = [ for i in 1 .. 10->a] 
    printfn "%A" listOfSquares 

任何提示或建議?

回答

14
let genRandomNumbers count = 
    let rnd = System.Random() 
    List.init count (fun _ -> rnd.Next()) 

let l = genRandomNumbers 10 
printfn "%A" l 
27

您的代碼僅僅讓一個隨機數,並使用10次,

這種擴展方法可能是有用的:

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)) 

然後你可以使用它像這樣:

let r = System.Random() 
let nums = r.GetValues(1, 1000) |> Seq.take 10 
+1

+1,很好的使用Seq.initInfinite – gradbot 2011-05-20 00:26:11

2

當我寫一個隨機的東西飲水機我喜歡用相同的隨機數字發生器用於每次調用分配器。你可以在F#中使用閉包(Joel's和ildjarn的答案的組合)。

實施例:

let randomWord = 
    let R = System.Random() 
    fun n -> System.String [|for _ in 1..n -> R.Next(26) + 97 |> char|] 

以這種方式,隨機的單個實例被「烘焙到」的功能,與每個呼叫重新使用。

+0

很好的答案,但沒有回答這個問題。改變它來產生數字而不是一個字,我想我會更喜歡這個。 – 2014-12-14 08:58:45