iPhone - 迭代字典数组并获取对象

时间:2011-02-09 12:30:41

标签: iphone nsarray nsdictionary

在我的应用程序中,我正在使用NSArray来保存NSDictionary的对象。 在每个字典中,有一个“Primary”保存NSNumber类型的值,它存储“YES”或“NO”(布尔值)。并且只有数组中的字典对象可以具有值“YES”。 如果不使用循环,如何获取“Primary”键为YES的字典对象?

2 个答案:

答案 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