/**
判断版本号---利用进制的思想,设定版本号每一位为一个数,设定进制比例,将其转换成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 @"第一个大";
}
网友评论