2016-03-30 22 views
0

Ich versuche F zu lernen, aber ich bin mit einer sehr einfachen Sache fest.Füllen Sie eine Liste mit eindeutigen Zufallswerten mit F #

Ich möchte eine Liste mit einzigartigen zufälligen Werten erstellen, die ich auf einer Konsole anzeigen kann. Sagen wir zufällig von 1 bis 100 und 10 Elemente in der Liste.

Ich habe hier diesen Code gesehen F# getting a list of random numbers:

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

let l = genRandomNumbers 10 
printfn "%A" l 

Aber wie kann ich Thesen Zahlen machen differents sein? Dies ist nicht genau eine doppelte Frage, weil ich keinen Weg finde, sicher zu sein, dass jede Zahl einzigartig ist; Random.Next können gleiche Zahlen erzeugen ...

+5

Was haben Sie bisher versucht? Auf welche besonderen Probleme bist du gestoßen? –

+0

Mit Ihrem Test sind sie alle unterschiedlich. –

+0

Die Zahlen, die ich bekomme, wenn ich deinen Code ausführe, sind unterschiedlich - '[27; 88; 77; 5; 90; 23; 13; 14; 47; 81] '. – Enigmativity

Antwort

1

Hier ist eine sehr einfache Lösung:

let genRandomNumbers count = 
    let rnd = System.Random() 
    let initial = Seq.initInfinite (fun _ -> rnd.Next (1, 100)) 
    initial 
    |> Seq.distinct 
    |> Seq.take(count) 
    |> Seq.toList 

Notiere die Seq.distinct tut genau das, was man die einzigartigen Werte erhalten möchten. Beachten Sie auch, dass Sie ein Problem bekommen, wenn Sie versuchen, eine Zahl größer als 99 zu erhalten, da es nicht so viele verschiedene Werte zwischen 1 und 99 gibt!

+0

sehr elegante Lösung. Vielen Dank – Tim

Verwandte Themen