Sort NSMutableArray with strings that contain numbers?

后端 未结 4 1518
北恋
北恋 2021-01-06 02:01

I have a NSMutableArray and it has the users high scores saved into it. I want to arrange the items numerically (the numbers are stored in NSStrings.)
Example:
4,2,7,8

相关标签:
4条回答
  • 2021-01-06 02:13

    If the array is of nsdictionaries conaining numeric value for key number

    isKeyAscending = isKeyAscending ? NO : YES;
    
    [yourArray sortUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
    
        NSString *str1 = [obj1 objectForKey:@"number"];
        NSString *str2 = [obj2 objectForKey:@"number"];
    
        if(isKeyAscending) { //ascending order
            return [str1 compare:str2 options:(NSNumericSearch)];
        } else { //descending order
            return [str2 compare:str1 options:(NSNumericSearch)];
        }
    }];
    
    //yourArray is now sorted
    
    0 讨论(0)
  • 2021-01-06 02:14

    This code works. I tried it:

    NSMutableArray *unsortedHighScores = [[NSMutableArray alloc] initWithObjects:@"4", @"2", @"7", @"8", nil];
    
    NSMutableArray *intermediaryArray = [[NSMutableArray alloc] init];
    
    for(NSString *score in unsortedHighScores){
        
        NSNumber *scoreInt = [NSNumber numberWithInteger:[score integerValue]];
        [intermediaryArray addObject:scoreInt];
    }
    
    NSArray *sortedHighScores = [intermediaryArray sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@", sortedHighScores);
    

    The output is this:

    2

    4

    7

    8

    If you have any questions about the code, just ask in the comments. Hope this helps!

    0 讨论(0)
  • 2021-01-06 02:25

    This code will do it:

    //creating mutable array
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"4", @"2", @"7", @"8", nil];
    
    //sorting
    [myArray sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
        return [str1 compare:str2 options:(NSNumericSearch)];
    }];
    
    //logging
    NSLog(@"%@", myArray);
    

    It uses blocks, make sure your target OS supports that (It's 4.0 for iOS and 10.6 for OSX).

    0 讨论(0)
  • 2021-01-06 02:30

    The NSMutableArray method sortUsingSelector: should do it:

    [scoreArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]
    

    should do it.

    0 讨论(0)
提交回复
热议问题