本周我面临的挑战是与 Objective-c 中的块达成协议。有一些关于语法的东西让我印象深刻。到达那里。
我有以下代码以特定方式实现两个数组的合并(请参阅下面代码中的注释)。
NSArray *keys = @[@"name", @"age"];
NSArray *data = @[
@[@"mark", @"36 years"],
@[@"matt", @"35 years"],
@[@"zoe", @"7 years"]
];
// desired outcome is
// @ { @"name" : @[@"mark", @"matt", @"zoe"],
// @"age" : @[@"36 years", @"35 years", @"7 years"]
// }
NSMutableArray *mergedData = [[NSMutableArray alloc] initWithCapacity:keys.count];
for (NSString *key in keys) {
NSLog(@"key: %@", key);
NSInteger keyIndex = [keys indexOfObject:key];
NSMutableArray *dataItemsForKey = [[NSMutableArray alloc] initWithCapacity:data.count];
for (NSArray *row in data) {
// double check the array count for row equals the expected count for keys - otherwise we have a 'match up' issue
if (row.count == keys.count) {
[dataItemsForKey addObject:[row objectAtIndex:keyIndex]];
}
}
[mergedData addObject:[NSDictionary dictionaryWithObject:dataItemsForKey forKey:key]];
}
NSLog (@"mergedData: %@", mergedData);
虽然这段代码运行良好,但为了我的挑战和学习,我想知道是否有更“优雅”(也就是更少的代码,更容易阅读)的方式来使用enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
??
我不太明白如何让它发挥作用,但为了自学,想知道那些在块和数组方面学得更多的人是否有更优雅的解决方案。