gpt4 book ai didi

clojure - 生成随机字符串的最快方法

转载 作者:行者123 更新时间:2023-12-03 00:37:04 27 4
gpt4 key购买 nike

我是 Clojure 和函数式编程的新手。我想创建一个包含 100,000 个 key 的列表,格式如下:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

我做了这样的事情:

(defn get-key [chunk-size, key-length] 
(apply str
(flatten
(interpose "-"
(partition chunk-size
(take key-length
(repeatedly #(rand-nth "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))))))

(defn dump-keys [n, chunk-size, key-length]
(with-open [wrt (io/writer "keys.txt")]
(doseq [i (range n)]
(.write wrt (str (get-key chunk-size key-length) "\n")))))

哪个产生

KYFL0-7YO6J-30XMV-ZIGE7-MK009
MNQZH-K7L8I-35C0K-7DS7Q-OTZWI
MVB9D-GHME9-IMGCL-YPAKX-4YZVD
... etc

但是,它需要大约 5 秒,与类似的命令式算法相比,这相对较长。

什么被认为是一种惯用(且快速)的方法来完成我想做的事情?

最佳答案

为了获得最大速度,我建议采用以下技术:

  • 使用预先分配的(char-array 29)构建键
  • 使用aset设置数组中每个位置的字符
  • 使用 randomz 获取非常快的随机数(比 java.util.Random 快约 150%)
  • 使用.charAt查找字符,例如类似于 (.charAt "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"(int (Rand/r 36)))
  • 使用 dotimes 进行循环 - 这通常比映射/任何带有序列的东西要快

如果您执行了上述所有操作,您应该会获得非常高效的代码,可能与用纯 Java 编写代码一样快。

关于clojure - 生成随机字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748447/

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