【问题标题】:Generate a random permutation of the elements of a list OCaml生成列表 OCaml 元素的随机排列
【发布时间】:2016-08-10 18:30:45
【问题描述】:

我想生成列表元素的随机排列, 示例:

listString =  ["a"; "b"; "c"; "d"; "e"; "f"]

我想要类似的东西:

result = ["a"; "e"; "f"; "b"; "d"; "c"]

但这会导致函数的每次调用都会发生变化。 因此,当我第二次调用该函数时,返回如下内容:

result = ["c"; "d"; "b"; "f"; "e"; "a"]

【问题讨论】:

  • 我看到了,但是该函数在该函数的每次调用中都重复相同的排列。我尝试生成一个随机 int 'n' 并使用该函数 shuffle n 次。
  • 现在 Random.int 每次都做同样的数字:/

标签: list random ocaml element


【解决方案1】:

我找到了解决方案:

 let shuffle d = begin
    Random.self_init ();
    let nd = List.map (fun c -> (Random.bits (), c)) d in
    let sond = List.sort compare nd in
    List.map snd sond
 end

一行Random.self_init();使用以系统相关方式选择的随机种子初始化生成器。

【讨论】:

  • 您可能只想在程序开始时(以及在随机播放功能之外)初始化一次 RNG。
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2020-12-22
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多