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:代わりにこの方法を使用できます。

ハッシュ順序の問題getgetを取り除くには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

知っておくべき2つのこと:

  1. NSDictionaryはKey-Valueコンテナであり、オブジェクトの順序を保証するものではありません。このデータ構造を使用して読み取るときに、挿入の順序が維持されることを保証する方法はありません。順序が重要である場合は他の戦略を確認してください。ただし、NSDictionaryこれに依存しないでください。
  2. キーとデータの情報を抽出する方法はいくつかあります。allKeysallValues。独自に作成する代わりにそれらを使用してください。
于 2012-08-31T14:11:35.380 に答える