检查对象数组是否包含字符串

时间:2013-01-08 18:53:39

标签: objective-c cocoa nsarray nsdictionary

我有一个UILocalNotification的数组。在每个通知中都有一个userInfo属性,即NSDictionary。在userInfo中,我设置了一个键@"ID",该值是一个唯一的ID。

所以我要做的是检查通知数组(如果任何userInfo属性)是否为键@"test"具有值@"ID",然后返回YES否则NO。我知道如何使用for循环来实现这一点,但我想知道是否有更优雅的方法来实现它。

2 个答案:

答案 0 :(得分:2)

你可以使用-[NSArray indexesOfObjectsPassingTest:],其中一个块为匹配对象返回YES,否则为NO:

NSArray *array = ...;
NSIndexSet *matchingIndexes = [array indexesOfObjectsPassingTest:^BOOL(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
    return [notification.userInfo[@"ID"] isEqualToString:@"test"];
}];
return [matchingIndexes count] != 0;

答案 1 :(得分:2)

我猜你不可能比基本的快速枚举更好地执行性能 - 可能使用“enumerate with options”方法之一,允许并发 - 但是肯定有更优雅的方法来编写你想做什么:

[[array valueForKeyPath:@"userInfo.ID"] containsObject:@"test"];