/**
判断版本号---利用进制的思想,设定版本号每一位为一个数,设定进制比例,将其转换成10进制数进行比价
@param versionCurrent 当前版本号
@param versionNew 新版本号
@return 返回结果
*/
-(NSString *)versionCompare:(NSString *)versionCurrent VersionNew:(NSString *)versionNew{
//找出版本号的分隔符
NSMutableArray *checkArr = [NSMutableArray arrayWithCapacity:versionCurrent.length + versionNew.length];
for (int idx = 0; idx < versionCurrent.length; idx++) {
[checkArr addObject:[versionCurrent substringWithRange:NSMakeRange(idx, 1)]];
}
for (int idx = 0; idx < versionNew.length; idx++) {
[checkArr addObject:[versionNew substringWithRange:NSMakeRange(idx, 1)]];
}
__block NSString * separator = @"Error";
[checkArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (![obj intValue]) {
separator = obj;
}
}];
for (int idx = (int)(checkArr.count - 1); idx >= 0; idx--) {
if ([checkArr[idx] isEqualToString:separator]) {
[checkArr removeObjectAtIndex:idx];
}
}
//判断版本号输入是否正确
__block BOOL checkState = @"Error";
[checkArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (![obj intValue]) {
checkState = NO;
*stop = YES;
}
}];
if (!checkState) {
return @"版本号输入错误";
}
//如没有分隔符直接比价大小就可以了
if ([separator isEqualToString:@"Error"]) {
if ([versionCurrent intValue] > [versionNew intValue]) {
return @"第一个大";
}
if ([versionCurrent intValue] == [versionNew intValue]) {
return @"一样大";
}
if ([versionCurrent intValue] < [versionNew intValue]) {
return @"第二个版本号大";
}
}
//将版本号转换成数组
NSArray * versionCurrentArr = [versionCurrent componentsSeparatedByString:separator];
NSArray * versionNewArr = [versionNew componentsSeparatedByString:separator];
//找出进制应为多少
NSMutableArray * sortArray = [NSMutableArray arrayWithArray:versionCurrentArr];
[sortArray addObjectsFromArray:versionNewArr];
int maxNum = 0;
for( NSString *tmp in sortArray){
float num = [tmp floatValue];
if(num > maxNum){
maxNum = num;
}
}
maxNum = maxNum*10;
//找出数组最大位数,为知道分数最大比例
NSInteger maxScoreProportion = MAX(versionCurrentArr.count, versionNewArr.count);
//记录版本号转换分数大小
NSInteger versionCurrentScore = 0;
NSInteger versionNewArrScore = 0;
//计算版本号分数
for (int idx = 0; idx < maxScoreProportion; idx++) {
if (idx < versionCurrentArr.count) {
versionCurrentScore += [versionCurrentArr[idx] integerValue]*powf(maxNum, maxScoreProportion - idx);
}
if (idx < versionNewArr.count) {
versionNewArrScore += [versionNewArr[idx] integerValue]*powf(maxNum, maxScoreProportion - idx);
}
}
//返回结果
if (versionNewArrScore > versionCurrentScore) {
return @"第二个版本号大";
}
if (versionNewArrScore == versionCurrentScore) {
return @"一样大";
}
return @"第一个大";
}
比较输入两个版本号大小
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 网上找了很多方法都不太靠谱,有问题,自己改了改,亲试可以 在比较版本号时,正确的做法应该是,主版本号和主版本号比较...