Edited at

NSDictionaryの高速列挙(for ... in...)で順番を保証する方法

More than 5 years have passed since last update.

Objective-Cの高速列挙(for ... in ...)は便利ですが、NSDictionaryに対して適用した場合は列挙される順番が保証されません。

順番通りじゃないと困るときの策をメモ。

// 一旦NSDictionaryのキーを取得

NSArray *keys = [dictionary allKeys];

// sortedArrayUsingComparatorを使ってソート
keys = [keys sortedArrayUsingComparator:^(id o1, id o2) {
return [o1 compare:o2];
}];

// 順番通りに値を取得
for (id key in keys) {
[array addObject:[dictionary objectForKey:key]];
}

オリジナルのObjectをソートするときはsortedArrayUsingComparatorの中身を変更すれば実装できると思います。