Objective-Cの高速列挙(for ... in ...)は配列全体を走査するのにとても便利なんだけど、取得される順番が保証されません。
# NSDictonaryのキーの順番通りに値を取り出したい!とする。
NSDictionary *dictionary = @{ @"1": @{@"name":@"bob"}, @"2": @{@"name":@"ken"}, @"3": @{@"name":@"john"}, @"4": @{@"name":@"mike"}, @"5": @{@"name":@"kozy"}, @"6": @{@"name":@"shorn"}, @"7": @{@"name":@"scott"}, @"8": @{@"name":@"mikeal"}, @"9": @{@"name":@"fun"} }; for (id key in dictionary) { NSLog(@"%@", key); // 1,2,3,...と出てくれない }順番通りに取り出したい時困る。
なので回避策としてNSArray#sortedArrayUsingComparatorを使う方法があります。
// 一旦NSDictionaryのキーを取得して NSArray *keys = [dictionary allKeys]; // sortedArrayUsingComparatorを使ってキーをソート keys = [keys sortedArrayUsingComparator:^(id o1, id o2) { return [o1 compare:o2]; }]; // 確認すると順番通りそ NSLog(@"%@", keys); NSMutableArray *array = [NSMutableArray array]; // あとは順番通りに値を取得する for (id key in keys) { [array addObject:[dictionary objectForKey:key]]; } // 完璧! NSLog(@"%@", array);これで最初のNSDictionaryのキー順番通りに値を取得できます
以上でぇぇえぇぇす。
0 件のコメント:
コメントを投稿