0

我正在尝试对可能看起来像这样正确排序的版本号数组进行排序:

1.0.1
1.1.2
1.2.0
1.10.3
2.1.1
2.2.2
2.10.2

我有一个数组,我执行以下操作:

NSArray *allUpdatekeys = [allUpdatekeystmp sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

这会产生一个类似的列表:

1.0.1
1.1.2
1.10.3
1.2.0
...

所以我尝试编写一个自定义选择器,并通过查看我发现的示例得到了这么多:

 - (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;
             }
         }
     } }

我的问题:引用第一个版本的方法是什么?我需要本质上是数组中的第一个字符串。我一直在绞尽脑汁来理解这一点,但是我发现的所有示例也都不起作用。如果有帮助或重要,我在 10.8 上使用 Xcode 4.4。

4

2 回答 2

3

我认为localizedStandardCompare这是您正在寻找的:

NSArray *theArray = [NSArray arrayWithObjects:    
                     @"1.0.1",
                     @"1.1.2",
                     @"1.2.0",
                     @"1.10.3",
                     @"2.1.1",
                     @"2.2.2",
                     @"2.10.2",
                     nil];

NSArray *sortedArray  = [[NSArray alloc] initWithArray:[theArray sortedArrayUsingSelector:@selector(localizedStandardCompare:)]];

NSLog(@"%@", sortedArray);

输出:

(
    "1.0.1",
    "1.1.2",
    "1.2.0",
    "1.10.3",
    "2.1.1",
    "2.2.2",
    "2.10.2"
)
于 2012-08-01T21:17:48.557 回答
1

另一种获得排序数组的解决方案,其中 1.2.0 小于 1.10.3,这意味着数组是按数字排序的,是:

allUpdatekeys = [allUpdatekeystmp sortedArrayUsingFunction:cmp context:NULL];

具有以下功能:

NSComparisonResult cmp( id val1, id val2, void *context ){
   return [val1 compare:num2 options:NSNumericSearch | NSCaseInsensitiveSearch];
}
于 2012-08-02T08:49:28.523 回答