比較輸入兩個版本號大小

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

相關文章