检查NSArray是否包含具有特定属性的对象

时间:2013-11-26 20:09:42

标签: ios objective-c uiview nsarray time-complexity

我有一个UIView数组。我想检查该数组是否包含具有特定标记的UIView。如果它确实那么我应该得到那个观点,否则我应该收到零。

截至目前我使用以下

// 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。我想知道是否还有其他更好的办法。

感谢。

1 个答案:

答案 0 :(得分:18)

我不认为你的方法的复杂性是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];
}