Как использовать сравнение по номеру версии, где в Objective-C меньше частей в одном номере?
Я нашел следующий код наhttp://snipplr.com/view/2771
Что довольно хорошо, почти то, что я искал, но если я использую значения@"1.4.5", @"10.4"
он дает неправильный результат, говоря, что первое число ниже.
Arghhhh Late night coding, sorry I read 10.4 as 1.4 :(
Я не уверен, почему сравнение имеет проблему и в чем проблема?
/*
* compareVersions(@"10.4", @"10.3"); //
returns NSOrderedDescending (1) - aka first number is higher
* compareVersions(@"10.5", @"10.5.0"); //
returns NSOrderedSame (0)
* compareVersions(@"10.4 Build 8L127", @"10.4 Build 8P135"); //
returns NSOrderedAscending (-1) - aka first number is lower
*/
NSComparisonResult compareVersions(NSString* leftVersion, NSString* rightVersion)
{
int i;
// Break version into fields (separated by '.')
NSMutableArray *leftFields = [[NSMutableArray alloc] initWithArray:[leftVersion componentsSeparatedByString:@"."]];
NSMutableArray *rightFields = [[NSMutableArray alloc] initWithArray:[rightVersion componentsSeparatedByString:@"."]];
// Implict ".0" in case version doesn't have the same number of '.'
if ([leftFields count] < [rightFields count]) {
while ([leftFields count] != [rightFields count]) {
[leftFields addObject:@"0"];
}
} else if ([leftFields count] > [rightFields count]) {
while ([leftFields count] != [rightFields count]) {
[rightFields addObject:@"0"];
}
}
.
// Do a numeric comparison on each field
for(i = 0; i < [leftFields count]; i++) {
NSComparisonResult result = [[leftFields objectAtIndex:i] compare:[rightFields objectAtIndex:i] options:NSNumericSearch];
if (result != NSOrderedSame) {
[leftFields release];
[rightFields release];
return result;
}
}
[leftFields release];
[rightFields release];
return NSOrderedSame;
}