在我的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)