📜  比较两个版本号(1)

📅  最后修改于: 2023-12-03 14:55:56.935000             🧑  作者: Mango

比较两个版本号

在软件开发过程中,我们经常需要比较两个版本号的大小。这个过程并不难,但需要注意一些细节。

版本号格式

通常情况下,版本号的格式为 X.Y.Z,其中 X 表示主版本号,Y 表示次版本号,Z 表示修订号。例如,1.2.3 表示主版本号为 1,次版本号为 2,修订号为 3。

比较规则

比较两个版本号的大小需要遵循以下规则:

  • X.Y.Z > X.Y.W (Z > W)
  • X.Y.Z > X.V.W (Y > V)
  • X.Y.Z < Q.W.E (X < Q)

即,若两个版本号的主版本号不同,则比较主版本号的大小;若主版本号相同,则比较次版本号的大小;若次版本号也相同,则比较修订号的大小。

代码实现

以下是一种比较两个版本号大小的 Python 实现:

def compare_version(version1: str, version2: str) -> int:
    v1 = [int(s) for s in version1.split('.')]
    v2 = [int(s) for s in version2.split('.')]
    n1, n2 = len(v1), len(v2)
    for i in range(max(n1, n2)):
        if i < n1 and i < n2:
            if v1[i] < v2[i]:
                return -1
            elif v1[i] > v2[i]:
                return 1
        elif i < n1:
            if v1[i] != 0:
                return 1
        else:
            if v2[i] != 0:
                return -1
    return 0

该函数接受两个版本号字符串,返回一个整数,表示它们的大小关系:

  • 若 version1 > version2,则返回 1;
  • 若 version1 < version2,则返回 -1;
  • 若 version1 == version2,则返回 0。

函数首先将版本号字符串转换为整数列表,然后对比主版本号、次版本号和修订号的大小。特别地,若短版本号的高位都比另一个版本号低位小,则视作该版本号比另一个版本号小。若版本号后面的部分没有了,则按照 0 处理。

示例

以下是使用上述函数比较若干版本号大小的示例:

assert compare_version('1.0.0', '1') == 0
assert compare_version('1.0.0', '1.0') == 0
assert compare_version('1.0.0', '1.0.0') == 0
assert compare_version('1.0.1', '1.0') == 1
assert compare_version('1.0.0', '1.1') == -1