NSMutableArray在最后一个索引处插入对象

时间:2012-08-31 14:06:26

标签: ios nsmutablearray

我正在尝试将NSDictionary的对象内容复制到NSMutableArray,我使用以下代码:

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

这是有效的,因为我从字典中获取所有对象,但是对象顺序已经反转,第一个对象现在是最后一个...

如何告诉insertObject在最后一个索引处添加对象?

由于

3 个答案:

答案 0 :(得分:2)

您可以改用addObject:方法。

要摆脱散列顺序问题get allKeys,对数组进行排序,然后使用元素作为键,以正确的顺序获取对象。

详细示例(对于整数键):

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];
}

答案 1 :(得分:0)

NSDictionary中元素的顺序是未定义的,您不知道它们将从字典中检索的顺序。排序数组的唯一方法是在字典中的所有值都传输到数组后对其进行排序。

答案 2 :(得分:0)

你应该知道两件事:

  1. NSDictionary是一个键值容器,不保证对象的顺序。使用此数据结构进行读取时,无法确保插入顺序。如果订单对您很重要,请检查其他策略,但不要依赖NSDictionary
  2. 您有几种方法可以提取密钥和数据的信息:allKeysallValues。使用它们而不是创建自己的。