关于通用软件版本大小比对问题请教

2023-12-06 16:06:00 +08:00
 wwxiong

当前有大量软件和版本数据,需要存储到数据库中。需求能对版本进行大小比对检索,软件版本格式不定(如下例子):

初步想法是所有软件版本均可通过程序转换成固定长度大小字符串(数字),然后就可以针对性的比较大小。不知道有没有比较好的方案处理,然后如果转换成固定长度大小字符串,有什么比较好的算法推荐吗?

谢谢🙏

1254 次点击
所在节点    程序员
9 条回复
orluna
2023-12-06 16:40:30 +08:00
pkoukk
2023-12-06 16:53:13 +08:00
https://semver.org/
应该各个语言都有各自的版本实现
wwxiong
2023-12-06 17:24:29 +08:00
@orluna 不是算法题,就是版本比较多,想用通用的方法进行大小比对。
wwxiong
2023-12-06 17:25:19 +08:00
@pkoukk 理论上是的,但是每个软件的版本格式都不一定一致,有些软件版本奇奇怪怪,想用个通用方式比对大小。
pkoukk
2023-12-06 17:32:48 +08:00
@wwxiong #4 试试你说的那些奇奇怪怪的能不能 parse 出来呗,parse 不出来让他们按标准去改,不然没辙,你总不可能希望哪个随便自己捏的版本号 甲-辰-艮坎 也能识别吧。
jim9606
2023-12-06 17:45:20 +08:00
只管句点+数字分割的部分就是了,剩下的要么当不存在要么字典序。
例如 windows 就强行规定需要使用版本号机制的组件都要用四段数字式版本号,android 只使用 versionNumber 做比较,versionCode 纯展示用
AoEiuV020JP
2023-12-06 17:48:18 +08:00
按我的习惯,横线后面的直接按字符串比大小,横线前面的用小数点拆分按数字比大小,
没什么特殊情况不会考虑把字符转成字符串去比大小,
我这边有一个把数字转成字符串比大小的案例,是因为判断条件太多,为了简化比大小这块的逻辑所以把能转成字符串的都转成字符串了,比如 置顶大于非置顶,部门大于员工,经理大于其他员工,手动排序时间字段从大到小,最后还有拼音排序,都放在 Comparator 中根本写不好,只能是每个 item 算出一个字符串,最后对字符串比大小,

不过你要存数据库比大小,不是很方便自定义 Comparator ,让我设计的话我会添加四个字段,三个数字,一个字符串, 不考虑数字部分超过 3 个的情况,真有就添加到后面字符串部分不管排序结果,
mxT52CRuqR6o5
2023-12-06 17:49:49 +08:00
格式完全不定的没法比啊,你像楼上发的那个 Semantic Versioning ,有规定的格式才有的比,格式不定的话我自己发明一种写法你咋比?
lisongeee
2023-12-06 18:08:02 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998096

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX