Ben
Ben

Reputation: 1031

NSMutableArray insert object at last index

I am trying to copy the objects content of a NSDictionary to a NSMutableArray, and I am using the following code :

             // Use when fetching binary data
             NSData *responseData = [request responseData];

             // View the data returned - should be ready for parsing.
             resultsDictionary = [responseData objectFromJSONData];
             NSLog(@"ResultsDictionary:%@", resultsDictionary);

             self.OnlineObjects = [[[NSMutableArray alloc] init] autorelease];

             for (NSDictionary * dataDict in resultsDictionary) {
                 [OnlineObjects insertObject:dataDict atIndex:0];
             }

             NSLog(@"OnlineObjects:%@", OnlineObjects);

This is working as i am getting all objects from the Dictionary, but the objects order have been revers, first object is now last ...

How can tell the insertObject to add the object at the last index ?

Thanks

Upvotes: 1

Views: 4145

Answers (3)

Alexander
Alexander

Reputation: 8147

You can use the addObject: method instead.

To get rid of the hash order problem get allKeys, sort the array and then use the elements as keys to get the objects in proper order.

Verbose example (for integer keys):

NSArray *indices = [[resultsDictionary allKeys] sortedArrayUsingComparator:^(id obj1, id obj2) {
    if ( [obj1 intValue] > [obj2 intValue] ) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ( [obj1 intValue] < [obj2 intValue] ) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

for (int i = 0; i < [indices count]; i++) {
    NSDictionary *obj = [resultsDictionary objectForKey:[indices objectAtIndex:i]];
    [OnlineObjects addObject:obj];
}

Upvotes: 2

Angel G. Olloqui
Angel G. Olloqui

Reputation: 8105

Two things you should know:

  1. NSDictionary is a key-value container, which does not guarantee the order of the objects. You have no way to ensure that the order of inserting will be mantained when reading by using this data structure. Check other strategies if order is important for you, but do not rely on NSDictionary for this.
  2. You have a couple of methods to extract the info of the keys and data: allKeys and allValues. Use them instead of creating your own.

Upvotes: 0

Asciiom
Asciiom

Reputation: 9975

The order of the elements in a NSDictionary is undefined, you don't know in which order they will be retrieved from the dictionary. The only way to do have the array sorted is to sort it once all the values from the dictionary are transferred to the array.

Upvotes: 0

Related Questions