I’m trying to sort an array of version numbers that might look like this properly sorted:
1.0.1
1.1.2
1.2.0
1.10.3
2.1.1
2.2.2
2.10.2
I have an array and I do the following:
NSArray *allUpdatekeys = [allUpdatekeystmp sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
This produces a list like:
1.0.1
1.1.2
1.10.3
1.2.0
...
So I tried writing a custom selector and I got this far by looking at examples I found:
- (NSComparisonResult)versionCompare:(NSString*) secondVersion {
NSArray *secondVer = [secondVersion componentsSeparatedByString:@"."];
NSString *firstVersion = [];
NSArray *firstVer = [firstVersion componentsSeparatedByString:@"."];
NSUInteger firstPri = [firstVer[0] integerValue];
NSUInteger firstSec = [firstVer[1] integerValue];
NSUInteger firstTer = [firstVer[2] integerValue];
NSUInteger secondPri = [secondVer[0] integerValue];
NSUInteger secondSec = [secondVer[1] integerValue];
NSUInteger secondTer = [secondVer[2] integerValue];
NSLog(@"In the version compare method");
NSLog(@"first %@ second %@ ", self, secondVersion);
if (firstPri < secondPri) {
return NSOrderedAscending;
}
else if (firstPri secondPri) {
return NSOrderedDescending;
} else {
if (firstSec < secondSec) {
return NSOrderedAscending;
}
else if (firstSec secondSec) {
return NSOrderedDescending;
}
else {
if (firstTer < secondTer) {
return NSOrderedAscending;
}
else if (firstTer secondTer) {
return NSOrderedDescending;
}
else {
return NSOrderedSame;
}
}
} }
My question: What is the way to reference the first version? I need what essentially is the first string from the array. I have been racking my brain to understand this, but all of the examples I have found don’t work either. I’m using Xcode 4.4 on 10.8 if that helps or matters.
I think
localizedStandardCompareis what you’re looking for:Output: