F# 用F填充具有唯一随机值的列表#

F# 用F填充具有唯一随机值的列表#,f#,F#,我正在努力学习F#,但我被一件非常简单的事情困住了 我想创建一个带有uniques随机值的列表,可以在控制台上显示。假设列表中有1到100个随机元素和10个元素 我在这里看到了以下代码: 但是我怎样才能使这些数字不同呢?这不是一个完全重复的问题,因为我没有找到一种方法来确保每个数字都是唯一的;随机。下一步可以生成相同的数字…这里有一个非常简单的解决方案: let genRandomNumbers count = let rnd = System.Random() let init

我正在努力学习F#,但我被一件非常简单的事情困住了

我想创建一个带有uniques随机值的列表,可以在控制台上显示。假设列表中有1到100个随机元素和10个元素

我在这里看到了以下代码:


但是我怎样才能使这些数字不同呢?这不是一个完全重复的问题,因为我没有找到一种方法来确保每个数字都是唯一的;随机。下一步可以生成相同的数字…

这里有一个非常简单的解决方案:

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

请注意,
Seq.distinct
正是您想要获得唯一值的地方。还请注意,如果您试图获得大于99的计数,则会遇到问题,因为在1和99之间没有那么多不同的值

这里有一个非常简单的解决方案:

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

请注意,
Seq.distinct
正是您想要获得唯一值的地方。还请注意,如果您试图获得大于99的计数,则会遇到问题,因为在1和99之间没有那么多不同的值

到目前为止你试过什么?你遇到了什么特别的问题?使用你的测试,它们都是不同的。我运行你的代码时得到的数字是不同的-
[27;88;77;5;90;23;13;14;47;81]
。这是随机的,它们可以相等。我有一个例子,它是平等的。我需要一种方法来检查这个数字在列表中的次数是否不多。这是我的名单:[22;12;31;12;23;74;44;28;57;51]。使用OO语言,我会得到一个随机数,检查它是否不存在,如果它已经存在于列表中,我会再次进行随机。请注意
System.random
。机器人的播种和分发被破坏;多次调用上述
getRandomNumbers
可能会导致相同的RNG种子,从而导致相同的序列。到目前为止,您尝试了什么?你遇到了什么特别的问题?使用你的测试,它们都是不同的。我运行你的代码时得到的数字是不同的-
[27;88;77;5;90;23;13;14;47;81]
。这是随机的,它们可以相等。我有一个例子,它是平等的。我需要一种方法来检查这个数字在列表中的次数是否不多。这是我的名单:[22;12;31;12;23;74;44;28;57;51]。使用OO语言,我会得到一个随机数,检查它是否不存在,如果它已经存在于列表中,我会再次进行随机。请注意
System.random
。机器人的播种和分发被破坏;多次调用上面的
getRandomNumbers
可能会产生相同的种子RNG,从而产生相同的序列。非常优雅的解决方案。感谢优雅的解决方案。谢谢