概要
- 高速列挙を使用して NSDictionary インスタンスを反復処理しています
- キーの昇順に基づいて NSDictionary インスタンスが列挙されることを期待していましたが、そうではないようです
私がしたいこと:
- 高速列挙を使用してキーの昇順で NSDictionary インスタンスを反復できるようにしたい
注:期待される出力と実際の出力を確認してください
質問
- 実装を間違えていますか?
- NSDictionary の高速列挙は、キーに基づく順序付けを保証しますか?
- そうでない場合、これに対する回避策はありますが、高速列挙を使用しますか?
例
#import<Foundation/Foundation.h>
int main()
{
system("clear");
NSDictionary *d1 = nil;
@autoreleasepool
{
d1 = [[NSDictionary alloc] initWithObjectsAndKeys: @"AAA", [NSNumber numberWithInt:10],
@"BBB", [NSNumber numberWithInt:20],
@"CCC", [NSNumber numberWithInt:30],
nil];
}
for(NSNumber* n1 in d1) //I expected fast enumeration for NSDictionary to be based on the
//ascending order of the key but that doesn't seem to be the case
{
printf("key = %p"
"\t [key intValue] = %i"
"\t value = %s\n",
n1,
[n1 intValue],
[[d1 objectForKey:n1] UTF8String]);
}
return(0);
}
期待される出力
key = 0xa83 [key intValue] = 10 value = AAA
key = 0x1483 [key intValue] = 20 value = BBB
key = 0x1e83 [key intValue] = 30 value = CCC
実際の出力
key = 0x1e83 [key intValue] = 30 value = CCC
key = 0xa83 [key intValue] = 10 value = AAA
key = 0x1483 [key intValue] = 20 value = BBB