iPhone Obj C -- Sorting a Mutable Array of dictionaries -- display a string but sort by value

10,299

To be able to help you I need a test data to work with. Let's say your array with data looks like this:

NSMutableArray *aMutableArray = [NSMutableArray arrayWithObjects:
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"A", @"name",
          [NSNumber numberWithInt:6], @"value", nil],
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"C", @"name",
          [NSNumber numberWithInt:2], @"value", nil],
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"B", @"name",
          [NSNumber numberWithInt:4], @"value", nil], nil];

In this case case here's how you sort it by value:

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES];
[aMutableArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];

As for where to place this code place it wherever you need the reordering to happen (in the implementation [.m] file of course).

HTH and if there will be any questions ask them in the comments.

Share:
10,299
Nathan
Author by

Nathan

Updated on June 04, 2022

Comments

  • Nathan
    Nathan over 1 year

    I have a NSMutableArray with 30 dictionaries inside of it. Each contains a name and a value. I currently have the names sorted so that the show in a table view alphabetically. However, I'd like to make a UIButton to give the option of STILL DISPLAYING THE NAMES, but ordered by the value. The value doesn't need to be displayed. Also, where in the .m/.h files would these codes be placed? THANKS!

  • Nathan
    Nathan almost 14 years
    Thank you very much! However, my array and dictionaries are stored inside a plist!!! Sorry for leaving that out. I've discovered (so it seems) that this would be extremely difficult if not impossible to accomplish. I've therefore moved onto a window-based project, with a tab bar and navigation controllers inside. I am now setting up the first tab, with a nav controller inside of it, which looks like this:
  • Nathan
    Nathan almost 14 years
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. DescriptionViewController *descriptionViewController = [[DescriptionViewController alloc] initWithNibName:@"DescriptionViewController" bundle:nil]; descriptionViewController.teamarray = [self.teams objectAtIndex:indexPath.row]; [self.navigationController pushViewController:descriptionViewController animated:YES]; [descriptionViewController release];
  • Nathan
    Nathan almost 14 years
    However, I get the error: Object cannot be set - either readonly property or no setter found. I know it must be easy to solve, but I'm a total newbie at this... Thanks.