比较输入两个版本号大小

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

你可能感兴趣的:(比较输入两个版本号大小)