1

我正在尝试将 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 在最后一个索引处添加对象?

谢谢

4

3 回答 3

2

您可以改用该addObject:方法。

要摆脱哈希顺序问题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];
}
于 2012-08-31T14:13:01.347 回答
0

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

于 2012-08-31T14:08:18.893 回答
0

你应该知道的两件事:

  1. NSDictionary是一个键值容器,不保证对象的顺序。使用此数据结构读取时,您无法确保插入顺序保持不变。如果顺序对您很重要,请检查其他策略,但不要依赖NSDictionary于此。
  2. 您有几种方法可以提取键和数据的信息:allKeysallValues. 使用它们而不是创建自己的。
于 2012-08-31T14:11:35.380 回答