【发布时间】:2016-12-26 04:53:21
【问题描述】:
我正在开发一个依赖伪 semver 版本号(仅使用主要、次要和补丁号)来索引文件的系统。
为了更快的比较和查找以及以这种方式进行操作的乐趣,我正在尝试为这些版本号计算一个数字“哈希”。此数字哈希应具有以下属性(以下极端示例):
Hash(1.0.500) < Hash(1.1.0) < Hash(1.3000.0) < Hash(2.0.0)
我已经尝试过各种各样的解决方案,例如加权每个位置或像这样
int hash = 17;
hash = hash * 42 + Major;
hash = hash * 42 + Minor;
hash = hash * 42 + Patch;
但所有这些都可以很快达到限制(跟随乘数或权重)
Hash(1.0.1500) > Hash(1.1.0)
我本可以选择一种肮脏的方式并使用一个大的乘法器来避免这种冲突(并确保最少的组合数量),但我更愿意选择一条更干净的路径
这可能吗?
【问题讨论】:
-
你对索引的每个部分都有大小限制吗?
-
我想避免引入尺寸限制,但关于亨利的回应,我想我必须这样做
-
某些架构(例如 Google App Engine)需要一个(长)数字来标识您的版本。因此,您必须将语义版本转换为数字。我已经使用了major*10000+minor*100+patch。当然,这将您限制为每个未成年人的 99 个乐段。
标签: algorithm math hash semantic-versioning