gpt4 book ai didi

clojure - Clojure 中的高效重复检查器

转载 作者:行者123 更新时间:2023-12-01 05:11:11 28 4
gpt4 key购买 nike

我正在寻找一种方法来有效地确定目录中的重复(通过 md5)文件,并使用“:unique”文件和“:other”文件的向量创建一组映射。我下面的代码可以在大约 46 秒(45948 毫秒)内在 2919 个文件上实现这一点。

此代码有效,但必须有更快的方法.. 如何更改我的代码以获得更高的性能?

(def extensions [".mp3" ".wav" ".mp4" ".flac" ".aac"])

(defn valid? [file]
"returns true when the file is not a directory and ends in one of the specified extensions"
(and (not (.isDirectory file))
(some true? (map #(.endsWith (.getName file) %) extensions))))

(defn file->file+hash [file]
"returns a map of the filepath and the files md5"
{:hash (d/md5 file) :path (.getAbsolutePath file)})

(defn split [[x & more]]
{:unique (:path x) :other (vec (map :path more))})

(defn get-dictionary [file-directory]
"returns a map of maps, each of which contain a ':unique' file and a vector of ':other' files"
(let [files (filter valid? (file-seq (f/file file-directory)))]
(map split (vals (group-by :hash (pmap file->file+hash files))))))

(def location "/home/matt/Music/Playlists")
(prn (str "Files: " (count (file-seq (f/file location)))))
(time (get-dictionary location))

"Files: 2919"
"Elapsed time: 45948.444212 msecs"

最佳答案

您可以尝试对已知内容(例如文件大小)而不是散列进行初始比较。如果您希望大多数文件都是唯一的,这将节省大量时间为所有文件计算哈希值。

关于clojure - Clojure 中的高效重复检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748996/

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