gpt4 book ai didi

function - F# 集合中的随机元素

转载 作者:行者123 更新时间:2023-12-04 05:28:11 25 4
gpt4 key购买 nike

我正在从事一个项目,该项目要求我编写一个从集合中选择指定数量的随机元素的函数。然后将这些元素映射到变量以供以后比较。

所以在我的场景中,我必须选择任何给定集合的 5%。

let rec randomSet (a:Set<string>) =
let setLength = (a.Count / 100) * 5

let list = []
let rand = System.Random
if set.Length <> setLength then
// some code will go here
randomSet setLength eIDS
else
set

^请批评我的代码,我只用 F# 编写了一周的代码。

我曾尝试递归执行此操作,但我感觉这是错误的方法。我尝试过其他方法,但它们使用 .take 函数,因此每次返回的集合都是相同的。

有什么想法吗?我不追求集合中的 1 个元素,我追求扔给它的任何集合的 5%。

这不是同一个问题:How can I select a random value from a list using F#

如果你认为是,请解释。

最佳答案

有多种方法可以做到这一点。根据输入中的元素数量和您要选择的项目数量,不同的策略可能更有效。

可能最简单的方法是按随机数对输入进行排序,然后使用take 获取所需数量的元素:

let data = [| 0 .. 1000 |]

let rnd = System.Random()

data
|> Seq.sortBy (fun _ -> rnd.Next())
|> Seq.take 50

这将对序列进行随机排序(对于大型序列可能会很慢),但它会精确地获取您想要的元素数量(与 Mark 的解决方案不同,它将返回大约 5% 的项目)。

如果您想从一个大列表中选择一个小数字,最好随机生成索引(确保没有重复项),然后根据索引进行直接查找。

关于function - F# 集合中的随机元素 <string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39253214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com