Objective-C [ObjC part:7];
■ このスレッドは過去ログ倉庫に格納されています
0772デフォルトの名無しさん
2012/08/10(金) 00:15:06.96オブジェクトの配列をキー配列の順序でソートしたく、下のように書いたのですが
indexOfObject:のたびに線形探索されていると思うとなんか上手くないなぁと思ってしまいます
もっと上手いやり方があるでしょうか?
NSArray *targetArray = @[ @{ @"object" : @"a", @"key" : @"c" }, @{ @"object" : @"b", @"key" : @"a" }, @{ @"object" : @"c", @"key" : @"b" }, @{ @"object" : @"d", @"key" : @"e" }, @{ @"object" : @"e", @"key" : @"d" }, ];
NSArray *keyArray = @[ @"a", @"b", @"c", @"d", @"e" ];
[targetArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@ => %@", [obj objectForKey:@"key"], [obj objectForKey:@"object"]);
}];
NSArray *sortedArray = [targetArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSUInteger index1 = [keyArray indexOfObject:[obj1 objectForKey:@"key"]];
NSUInteger index2 = [keyArray indexOfObject:[obj2 objectForKey:@"key"]];
return [@(index1) compare:@(index2)];
}];
[sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@ => %@", [obj objectForKey:@"key"], [obj objectForKey:@"object"]);
}];
■ このスレッドは過去ログ倉庫に格納されています