/**
判斷版本號---利用進位制的思想,設定版本號每一位為一個數,設定進位制比例,將其轉換成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 @"第一個大";
}