我有一個UILocalNotification
s的數組。在每個通知中都有一個userInfo
屬性,它是一個NSDictionary
。在userInfo中,我設置了一個密鑰@"ID"
,該值是一個唯一的ID。檢查對象數組是否包含字符串
所以我想要做的是檢查通知的數組是否有任何userInfo屬性的值爲@"test"
的密鑰@"ID"
然後返回YES
否則NO
。我知道如何通過for循環來實現這一點,但我想知道是否有更好的方法來實現它。
我有一個UILocalNotification
s的數組。在每個通知中都有一個userInfo
屬性,它是一個NSDictionary
。在userInfo中,我設置了一個密鑰@"ID"
,該值是一個唯一的ID。檢查對象數組是否包含字符串
所以我想要做的是檢查通知的數組是否有任何userInfo屬性的值爲@"test"
的密鑰@"ID"
然後返回YES
否則NO
。我知道如何通過for循環來實現這一點,但我想知道是否有更好的方法來實現它。
您可以使用-[NSArray indexesOfObjectsPassingTest:]
這會佔用匹配對象,NO否則返回YES塊:
NSArray *array = ...;
NSIndexSet *matchingIndexes = [array indexesOfObjectsPassingTest:^BOOL(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
return [notification.userInfo[@"ID"] isEqualToString:@"test"];
}];
return [matchingIndexes count] != 0;
我猜想,你就不可能做的更好性能方面比基本快速列舉 - - 也許使用的一個方法,允許併發「的選項枚舉」 - 但也有寫你想要做什麼肯定更優雅的方式:
[[array valueForKeyPath:@"userInfo.ID"] containsObject:@"test"];
性能方面這是優於一個for循環?如果沒有,我會投票for for循環,因爲它(對我來說)更具可讀性。 –
我會避免[過早優化](http://programmers.stackexchange.com/questions/80084/is-premature-optimization-really-the-root-of-all-evil),這是有效的,它可以做到你想要,你真的認爲你已經產生了足夠的通知,這成爲一個性能問題? – Joe
何時需要設置「BOOL * stop = YES」? –