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