按软件版本排序/排序 - 算法/实现
我正在寻找一种方法来对定义软件版本的一组字符串进行排序/排序,格式如下:xxx(例如:1.3.12)。
这些字符串位于数据库(mysql)中,但我不确定这是否相关。
我能想到的一个想法是进行字符串 -> 整数(或浮点)转换,然后按整数索引对集合进行排序。但是我不确定这是否可能。
我也在寻找其他想法。
谢谢
更新:我只是想设置一个代表我可以实现的最大版本的数字(我所说的版本是指主要版本,次要版本,修订版)。例如我选择数字 300 ,所以最大版本将为 299.299.299 所以..当我转换时,我可以这样做:major*pow(300,2)+minor*pow(300,1)+revision*pow(300,0)
仍然对想法持开放态度.
I'm looking for a way to order/sort a set of strings that define software versions, in the following format: x.x.x (e.g.: 1.3.12).
Those strings are in an database(mysql) , but I'm not sure if this is even relevant.
One idea I can think of is to make a String ->integer(or float) conversion and than sort the set by the integer index. However I'm not sure if this is possible.
Also I'm looking for other ideas.
Thanks
UPDATE: I just thought about setting a number which represents the maximum version I could implement(and by version I mean major version,minor version, revision). for example I choose the number 300 , so the maximum version will be 299.299.299
so.. when I convert I can do something like this: major*pow(300,2)+minor*pow(300,1)+revision*pow(300,0)
Still opened to ideas.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不要使用多点字符串作为字符串 - 比较它的值时您会非常头疼
在您的情况下,您可以(必须?)将版本扩展为 4 个八位字节字符串(尾随 0)并使用 IP4 相关函数(从前端或内置 MySQL)
来自 MySQL 手册
Don't use multidotted strings as strings - you'll have big headache on compare it's value
In your case you can (must?) expand version to 4-octets string (with trailing 0) and use IP4-related functions (from frontend or built-in MySQL)
From MySQL manual
我只能给出没有语言的伪代码,但是......在 mysql 中使用 SUBSTRING_INDEX() 或另一种语言中的类似函数来使用 .作为分隔符。然后使用一组嵌套的 if..then 条件来比较字符串,例如
等......
堆是另一种方法。将比较定义为compare() 函数。然后添加值并让堆对它们进行排序。
I can only give pseudocode without a language, but... Use SUBSTRING_INDEX() in mysql or a similar function in another language to break the string up using the . for a delimiter. Then use a set of nested if..then conditionals to compare the strings like
etc....
A heap is another way to do it. Define the comparison as the compare() function. then add the values and let the heap sort them.
遇到同样的问题,我最终针对类似情况提供了以下解决方案:
Having the same problem I end up with the following solution for the similar case:
您可以将这些值存储为 VARCHAR 或 CHAR,然后只需在查询末尾添加 ORDER BY ... DESC 即可在顶部获取最新版本,或者省略 DESC 部分(MySQL 默认为 ASC)以获得最早的版本版本在顶部
伪代码:
You can store those values as VARCHAR or CHAR then just add an ORDER BY ... DESC to the end of your query to get the latest version at the top or leave off the DESC part (MySQL defaults to ASC anyway) to get the earliest version at the top
Pseudo code: