kubou.dev();

好きな言葉は一石二鳥

NSDictionaryをforでまわすと順序が保証されない(高速列挙)

NSDictonaryをなんとなく高速列挙してたら、期待している通りの順番で返ってこなかったのでメモ。

// この書き方だと、順序が保証されない。1,2,3とは返ってこない。
for (id key in dictionary) {
    NSLog(@"%@", key);
}

NSArrayのsortedArrayUsingComparatorでソートしてから取り出すようにしました。

NSArray *keys = [dictionary allKeys]; 

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

NSMutableArray *array = [NSMutableArray array];

// あとはソートされた順番にNSDictionaryから取得するだけ
for (id key in keys) {
    [array addObject:[dictionary[key]]];
}