我是Clojure和函数式编程的新手。我想创建以下格式的100,000个键的列表: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
在数组java.util.Random
快约150%).charAt
查找字符,例如像(.charAt "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" (int (Rand/r 36)))
dotimes
-这通常比映射/带有序列的任何东西如果执行上述所有操作,您将获得非常高效的代码,可能与使用纯Java编写代码时一样快。
关于clojure - 生成随机字符串的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16748447/