开发者

Sorting array(NSArray) in descending order

I ha开发者_如何转开发ve a array of NSString objects which I have to sort by descending.

Since I did not find any API to sort the array in descending order I approached by following way.

I wrote a category for NSString as listed bellow.

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

    NSComparisonResult returnResult = NSOrderedSame;

    returnResult = [self compare:aString];

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

    return returnResult;
}

Then I sorted the array using the statement

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

Is this right solution? is there a better solution?


You can use NSSortDescriptor:

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO selector:@selector(localizedCompare:)];
NSArray* sortedArray = [inFileTypes sortedArrayUsingDescriptors:@[sortDescriptor]];

Here we use localizedCompare: to compare the strings, and pass NO to the ascending: option to sort in descending order.


or simplify your solution:

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);


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

Using this code we can sort the array in descending order on the basis of length.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜