版本号大小比较算法
版本号之间比较大小,本质上是比较字符串之间的关系。这里给定两个版本号,你一定能迅速地区分出大小:
0.0.2
0.0.3
想要让计算机程序分辨她们的关系,可以直接使用strcmp()函数获取返回值,如果你在 iOS 系统下编程,也可以使用 NSString 类提供的- (NSComparisonResult)compare:(NSNumber *)decimalNumber方法。
但如果版本进化成下面这样,上面所说的 API 一定会产生错误的结果。
2.7.14.2345
2.12.8.1234
因为单纯的字符串比较大小的依据是每个字符的 ASCII 码。程序会认为字符7比字符1大,结果就是第一个版本号大于第二个版本号,这是错误的。
因此在识别之前,有必要了解一下版本号的组成部分,以及每一个数字的意义,这里已 GUN 风格的版本号作为说明。
版本号大致以下几个部分组成:
主版本号
次版本号
修正版本号
编译版本号
示例: 3.5.20.9527
在比较版本号时,正确的做法应该是,主版本号和主版本号比较,次版本号和次版本号比较等等。所以算法的核心应该是分离出版本号的各个组成部分。由此产生的算法会有多种。这里列举一个方式最简单粗暴的 C 语言代码:
/**
* 比较版本号
*
* @param v1 第一个版本号
* @param v2 第二个版本号
*
* @return 如果版本号相等,