在我的应用程序中,我正在使用NSArray来保存NSDictionary的对象。 在每个字典中,有一个“Primary”保存NSNumber类型的值,它存储“YES”或“NO”(布尔值)。并且只有数组中的字典对象可以具有值“YES”。 如果不使用循环,如何获取“Primary”键为YES的字典对象?
答案 0 :(得分:1)
您可以在NSArray
上调用便捷方法来查找对象,但请注意,此类方法仍在内部使用循环来查找对象。
NSUInteger indexOfPrimary = [array indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
return [[obj objectForKey:@"Primary"] boolValue];
}];
NSDictionary *primary = nil;
if (indexOfPrimary != NSNotFound) {
primary = [array objectAtIndex:indexOfPrimary];
}
另一个选项是-[NSArray filteredArrayUsingPredicate:]
。
答案 1 :(得分:0)
“不使用循环”是什么意思?意思你不写for循环,或者你的意思是你使用的任何例程都不会使用循环?如果你想要“恒定时间”而不是“线性时间”的答案,你应该只保留一个指向记录的指针。如果你没有将元素插入/删除到数组中,那么不,除了线性时间查找之外别无他法,无论是自己做一个循环,还是使用NSArray的
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate