如何随机选择Ocaml中的元素?

Tra*_*vis 4 random ocaml

在我的OCaml程序中,我需要从一大串字符串中随机选择一个字符串.到目前为止,我尝试过两种不同的方法,每种方法都没有成功.我首先将所有字符串存储到列表中,然后从列表中随机选择一个元素:

let randomelement l =
    List.nth l (Random.int (List.length l))
Run Code Online (Sandbox Code Playgroud)

但是如果它在列表中选择第1000个字符串,则需要很长时间.所以我把它全部放到一个集合中,认为这Set.choose会从集合中返回一个随机元素.但这似乎并没有奏效.我想我有两个问题......如何Set.choose工作,有没有更好的方法在Ocaml中随机选择一个元素?

Fik*_*tik 11

如果您关心选择速度,您应该使用不同的容器.当你可以使用带有O(1)的数组,即恒定时间时,为什么使用带有O(n)中的访问权限或带有O(log n)设置的List.

要调整你的例子:

let randomelement arr =
    let n = Random.int (Array.length arr) in
    Array.get arr n;;
Run Code Online (Sandbox Code Playgroud)