clojure - Clojure 哈希算法
问题描述
我有工作代码,我可以在其中获得数据结构的哈希码,(hash data-structure)
但它只适用于少量数据结构。当我有几百万个数据结构时,它会开始给我重复的哈希(冲突)。当数据结构的结构未知时,如何获得更独特的东西?
解决方案
你总是可以求助于 md5 (或其他任何东西,真的)。
(defn md5 [^String s]
(let [algorithm (MessageDigest/getInstance "MD5")
raw (.digest algorithm (.getBytes s))]
(format "%032x" (BigInteger. 1 raw))))
(defn md5-hash [s] (md5 (pr-str s)))
(md5-hash {:a [1 2 3 '(5 6 7)]})
=> "8f941424e629b876cdcb51509521870d"
此外,您可以使用 Java 序列化而不是pr-str
.
推荐阅读
- javascript - Expo react-native 不使用 fontFamily
- haskell - Haskell GHCJS with Diagrams 给出错误:没有为此平台提供 C 编译器
- kubernetes - 我可以在“排除模式”中创建 Kubernetes 角色吗?
- javascript - 有什么方法可以在不悬停的情况下默认显示所有数据点?
- java - 为什么我无法在 @Async 方法中获得结果?(抛出“IllegalStateException:EntityManagerFactory 已关闭”)
- swift - 使用 Embassy 成功进行 UI 测试后随机崩溃
- c# - Blazor 组件事件回调
- node.js - BullMQ - 在服务器重启之间持久化作业排队和管理作业
- autodesk-forge - 从 externalId Autodesk Forge 检索元素
- powershell - 在 psm1 模块内的 Import-Module 上使用“-Force”时规避 PowerShell 模块“隐藏”