当前位置:威尼斯 > 操作系统 > 主版本号.次版本号.修订号,只包含数字和.字符

主版本号.次版本号.修订号,只包含数字和.字符

文章作者:操作系统 上传时间:2019-11-06

版本号表示格式为 epoch:version-release,举个例子 1:2-3

主题素材:相比七个本子号version1和version2。
若是版本 1 > 版本2重返1,则版本 1 < 版本2重回-1,不然重回0。
你或然以为版本字符串不是空的,只富含数字和.字符。
该.字符不意味着小数点,用于分隔数字类别。
诸如,2.5不是“二分之二”或“八分之风流倜傥”,是首回一流修正的第八回修订。
以下是版本号排序的现身说法:
0.1 <1.1 <1.2 <13.37

本子格式:主版本号.次版本号.修正号

先是条标准是 rpm 属性优先级 epoch > version > release
        多少个 rpm 包比较时,先看两个的 epoch 哪个新,假若 epoch 相等,再看 version 哪个新,借使 version 还十一分,最终看 release 哪个新,若是 release 也也正是,那么那多少个 rpm 包的本子是特别的。
0:1-2 > 0:1-1
0:2-1 > 0:1-3
1:1-1 > 0:2-2

思路:分别对版本号以.分割,按最大尺寸对版本号数组循环,按顺序相比。

版本号依次增加准绳如下:

其次条法规是本子号字段列表分隔形式
        epoch 属性之外,version 和 release 或许不单单满含数字,也恐怕带有字符串,比如 1.0阿尔法1、2.0.0+svn12221
        蒙受这种景色时,版本号字段会被分隔为列表。分隔战术是数字与字符串分开,变成自然分隔边界,点号/加号/减号/下划线作为分隔符。1.0阿尔法1 会分为 [ 1、0、alpha、1 ],2.0.0+svn12221 会分为 [ 2、0、0、svn、12221 ]。那样子分隔的目标是为了列表相应分段进行相比,相比较的优先级依据列表的下标顺序自然排序,第壹位的优先级最高,后边依次减少。如若四个列表可正如的分层经过比较后都杰出,那么列表长的比列表短的新,倘诺列表长度也豆蔻年华致,那么那多个版本号字段相等。
1.2.0 > 1.1.9            ( [1,2,0] 中第2分段的“2” > [1,1,9] 中第2分段的“1” )
1.12.1 > 1.9beta2   ( [1,12,1] 中第2分段的“12” > [1,9,beta,2] 中第2分段的“9” )
3.1.0 > 3.1               ( [3,1,0] 的列表长度3 > [3,1] 的列表长度2 )

代码:

  • 主版本号:当你做了不相配的API 纠正。
  • 次版本号:当你做了向下包容的作用性新扩充。
  • 修定号:当您做了向下宽容的标题纠正。

其三条原则是列表分段比较算法
        具体的算法应用于八个待相比较的分支串,由于第二条准则的涉嫌,这里的串只大概都以数字或都是字母,例如"12"、"abc"、"BETA"
        若是是数和数比较,那么四个串会看作多少个整数进行自然数比较,前导的零会被忽略,"12" -> 12,"00010" -> 10。
        如若是字符串和字符串相比较,那么会进展就如 C 语言 strcmp() 函数的逻辑,依照 ACSII 码顺序得出,排在后边的为新本子,小写字母比大写字母新。
        要是是字符串和数相比较,那么确定数比字符串新。
123 > 121
svn > rc
alpha > Beta
0 > beta

public int compareVersion(String version1, String version2) {
    String[] levels1 = version1.split("\\.");
    String[] levels2 = version2.split("\\.");

    int length = Math.max(levels1.length, levels2.length);
    for (int i=0; i<length; i++) {
        Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0;
        Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0;
        int compare = v1.compareTo(v2);
        if (compare != 0) {
            return compare;
        }
    }

    return 0;
}

优先版本号及版本编写翻译新闻方可加到“主版本号.次版本号.修定号”的背后,作为延伸。

        最后交给一些例证,应该丰盛表达 rpm 包的版本号比较是哪些的了。威尼斯 1
1.00010 > 1.9,因为 10 > 9
2.02 = 2.2,因为 02 = 2
3.4.0 > 3.4,因为 3.4.0 多出三个列表分段
5mgc25 = 5.mgc.25,因为分隔后的列表两个对等
6.0 > 6beta,因为数字比字符串新

复杂度
时间 O(N) 空间 O(N)


  1. 采纳语义化版本调节的软件“必须MUST”定义公共API。该API能够在代码中被定义或现身
    于严刻的文件内。不论何种方式都应当力求准确且完全。
  2. 专门的学问的版本号“必须MUST”选择XYZ的格式, 此中X、Y和Z为非负的整数,且“防止MUST
    NOT”在数字前方补零。X是主版本号、Y是次版本号、而Z为修定号。各类成分“必需
    MUST”以数值来依次增加。比方:1.9.1 -> 1.10.0 -> 1.11.0。
  3. 标志版本号的软件发行后,“禁绝MUST NOT”改动该版本软件的剧情。任何改过都“必需
    MUST”以新本子发行。
  4. 主版本号为零(0.yz卡塔尔的软件处于开垦开始阶段,一切都可能天天被改成。那样的公共
    API 不应有被视为稳固版。
  5. 1.0.0 的版本号用于界定公共API 的演进。那少年老成版本之后有所的版本号更新都基于公共
    API 及其改善内容。
  6. 修改装订号Z(xyZ | x > 0卡塔 尔(阿拉伯语:قطر‎“必得MUST”在只做了向下包容的校勘时才依次增加。这里的修改指的
    是照准不得法结果而开展的内部校正。
  7. 次版本号Y(xYz | x > 0卡塔尔“必需MUST”在有向下包容的新职能现身时依次增加。在此外集体
    API的效果被标识为弃用时也“必得MUST”依次增加。也“能够MAY”在里面程序有大气新效率或
    精耕细作被投入时递增,个中“可以MAY”包罗修定级其他转移。每当次版本号递增时,修正
    号“必须MUST”归零。
  8. 主版本号X(Xyz | X > 0卡塔 尔(英语:State of Qatar)“必需MUST”在有其它不合营的改换被投入公共API时依次增加。其
    中“能够MAY”包罗次版本号及修改装订等级的改正。每当主版本号依次增加时,次版本号和修正
    号“必须MUST”归零。
  9. 优先版本号“能够MAY”被声明在修正版之后,先加上叁个连接号再加多一而再串以句点分隔
    的标志符号来修饰。标记符号“必需MUST”由ASCII码的英数字和连接号[0-9A-Za-z-]组
    成,且“禁绝MUST NOT”留白。数字型的标志符号“防止MUST NOT”在前方补零。先行版
    的优先级低于相关联的正经版本。被标上先行版本号则表示这么些版本并不是牢固何况只怕
    无法达到杰出的需要。表率:1.0.0-阿尔法、1.0.0-阿尔法.1、 1.0.0-0.3.7、1.0.0-
    x.7.z.92。
  10. 本子编译音讯“能够MAY”被标注在修定版或先行版本号之后,先加上贰个加号再增进接二连三
    串以句点分隔的标记符号来修饰。标志符号“必得MUST”由ASCII的英数字和接二连三号[0-9AZa-z-]组成,且“禁止MUST
    NOT”留白。当决断版本的预先层级时,版本编写翻译消息“可
    SHOULD”被忽视。因而当三个版本独有在本子编译信息有差距时,归于同豆蔻梢头的预先层
    级。范例:1.0.0-alpha+001、1.0.0+20130313144700、 1.0.0-beta+exp.sha.5114f85。
  11. 本子的早期层级指的是例外版本在排序时怎么样相比较。判定优先层级时,“必得MUST”把版
    本依序拆分为主版本号、次版本号、修定号及先行版本号后进行比较(版本编写翻译音讯不
    在这里份相比的列表中卡塔尔国。由左到右依序比较每一个标记符号,第叁个差距值用来决定优先
    层级:主版本号、次版本号及修改装订号以数值相比,举例1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。当
    威尼斯,主版本号、次版本号及修改装订号都如出风流罗曼蒂克辙时,改以优先层级极低的预先版本号决定。例
    程序员的小编修养
    语义化版本 12
    如:1.0.0-阿尔法 < 1.0.0。有相似主版本号、次版本号及修正号的四个优先版本号,其优
    先层级“必得MUST”透过由左到右的每种被句点分隔的标记符号来相比,直到找到两个差
    异值后决定:唯有数字的标记符号以数值高低比较,有字母或三番四遍号时则逐字以ASCII的
    排序来相比较。数字的标记符号比非数字的标志符号优先层级低。若起初的标志符号都相
    再正是,栏 位相当多的先行版本号优先层级相比高。圭臬:1.0.0-阿尔法 < 1.0.0-阿尔法.1 <
    1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0- rc.1 < 1.0.0。@

忘了附带链接了,有空加

本文由威尼斯发布于操作系统,转载请注明出处:主版本号.次版本号.修订号,只包含数字和.字符

关键词: