2013-11-26 208 views
3

我有一个UIView数组。我想检查该数组是否包含具有特定标签的UIView。如果确实如此,那么我应该得到这个观点,否则我应该得到零。检查NSArray是否包含具有特定属性的对象

截至目前我使用以下

// validCells is an array UIView 

NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *ignored){ 
      return ((UIView *)obj).tag == i; 
     }]; 

UIView *cell = [[validCells filteredArrayUsingPredicate:p] lastObject]; 

这工作正常,但复杂性为n^2。我想知道是否有其他更好的方法来做到这一点。

谢谢。

+4

你有特别需要使用谓词?你可以通过枚举来完成O(n)。另外,这真的太慢了​​吗?你可能有多少个观点? –

+1

为什么复杂n^2? –

+3

为什么你认为复杂度是O(n^2)? –

回答

17

我不认为你的方法的复杂性是O(n^2),它更可能是O(n)。 但是,如果您只是搜索特定的 元素,则没有理由创建临时数组。正如@Josh所说,你可以做一个简单的枚举。

如果你想成为一个有点更看中的,你可以把它写成

NSUInteger index = [validCells indexOfObjectPassingTest:^BOOL(UIView *view, NSUInteger idx, BOOL *stop) { 
    return view.tag == idx; 
}]; 
if (index != NSNotFound) { 
    cell = validCells[index]; 
} 
+0

这个感觉比我的解决方案更正确。 – slonkar

相关问题