0

NSDictionary の列挙された出力が、アイテムが追加された順序と同じシーケンスを返していないことに気付きました。

NSMutableArray *arrKeys;
NSMutableArray *arrValues;
NSDictionary *items;

arrKeys = [NSMutableArray arrayWithCapacity:5];
arrValues = [NSMutableArray arrayWithCapacity:5];

[arrKeys addObject:@"A"]; [arrValues addObject:@"First"];
[arrKeys addObject:@"B"]; [arrValues addObject:@"Second"];
[arrKeys addObject:@"C"]; [arrValues addObject:@"Third"];
[arrKeys addObject:@"D"]; [arrValues addObject:@"Fourth"];
[arrKeys addObject:@"E"]; [arrValues addObject:@"Last"];

items = [NSDictionary dictionaryWithObjects:arrValues forKeys:arrKeys];

for (NSString *aKey in items) {
    NSLog(@"%@=%@", aKey, [items valueForKey:aKey]);
}

戻り値...

A=最初
D=4番目
B=2番目
E=最後
C=3番目

ディクショナリを使用すると、キーでアイテムにランダムにアクセスできることに感謝しますが、コレクションの列挙中にアイテムが返される任意の順序には何らかの根拠がありますか?

4

1 に答える 1

3

それだけですNSDictionary。繰り返しの順序は保証されません。これは、通常のハッシュ テーブルに期待される動作と一貫性があります。クイック ルックアップ用に最適化されていますが、順序付けされた反復用には最適化されていません。

arrKeysすでに持っているものを反復してみませんか?

于 2012-07-09T06:29:15.633 に答える