Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 按降序排序数组(NSArray)_Objective C_Cocoa - Fatal编程技术网

Objective c 按降序排序数组(NSArray)

Objective c 按降序排序数组(NSArray),objective-c,cocoa,Objective C,Cocoa,我有一个NSString对象数组,必须按降序排序 由于我没有找到任何API来按降序对数组进行排序,所以我采用以下方法进行处理 我为NSString编写了一个类别,如下所示 - (NSComparisonResult)CompareDescending:(NSString *)aString { NSComparisonResult returnResult = NSOrderedSame; returnResult = [self compare:aString];

我有一个NSString对象数组,必须按降序排序

由于我没有找到任何API来按降序对数组进行排序,所以我采用以下方法进行处理

我为NSString编写了一个类别,如下所示

- (NSComparisonResult)CompareDescending:(NSString *)aString
{

    NSComparisonResult returnResult = NSOrderedSame;

    returnResult = [self compare:aString];

    if(NSOrderedAscending == returnResult)
        returnResult = NSOrderedDescending;
    else if(NSOrderedDescending == returnResult)
        returnResult = NSOrderedAscending;

    return returnResult;
}
然后,我使用语句对数组进行排序

NSArray *sortedArray = [inFileTypes sortedArrayUsingSelector:@selector(CompareDescending:)];

这是正确的解决方案吗?有更好的解决方案吗?

您可以使用NSSortDescriptor:

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO selector:@selector(localizedCompare:)];
NSArray* sortedArray = [inFileTypes sortedArrayUsingDescriptors:@[sortDescriptor]];
这里我们使用
localizedCompare:
来比较字符串,并将
NO
传递给升序:选项以降序排序

NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[wordsArray sortUsingDescriptors:sortDescriptors];

使用此代码,我们可以根据长度按降序排列数组。

或简化您的解决方案:

NSArray *temp = [[NSArray alloc] initWithObjects:@"b", @"c", @"5", @"d", @"85", nil];
NSArray *sortedArray = [temp  sortedArrayUsingComparator:
                        ^NSComparisonResult(id obj1, id obj2){
                            //descending order
                            return [obj2 compare:obj1]; 
                            //ascending order
                            return [obj1 compare:obj2];
                        }];
NSLog(@"%@", sortedArray);

自上述“SortDescriptor WithKey”10.6以来,我使用了以下语句。[[NSSortDescriptor alloc]initWithKey:nil升序:NO];谢谢……事实上,我应该提到——别忘了——自动释放:)真是太棒了!谢谢