检查NSArray是否包含一些int

Hen*_*nry 16 objective-c nsnumber nsmutablearray nspredicate

我有一个NSMutableArrayNSNumbers.基本上我只是想检查NSNumbers数组中是否有任何值=某个值.

我可以遍历数组,逐个检查,这绝不是最佳选择.

我也试过并且使用失败containsObject,因为这只有在id相同的情况下才有效.

我读了一些关于NSPredicate这个问题的解决方案,但我不确定如何使用它NSArray.

任何答案都表示赞赏.

谢谢

Tie*_*eme 20

受伯恩斯坦的启发,我查了一些关于这个的信息,我找到了 CFArrayContainsValue

BOOL CFArrayContainsValue(CFArrayRef theArray, CFRange range, const void *value);
Run Code Online (Sandbox Code Playgroud)

例:

NSArray *numbers;
NSNumber *value;
BOOL found = CFArrayContainsValue ( (__bridge CFArrayRef)numbers, 
                                    CFRangeMake(0, numbers.count), 
                                    (CFNumberRef)value );
Run Code Online (Sandbox Code Playgroud)

像魅力一样,真的很快!


Don*_*nit 12

    NSPredicate *valuePredicate=[NSPredicate predicateWithFormat:@"self.intValue == %d",[myValueNumber intValue]];

    if ([[numbersArray filteredArrayUsingPredicate:valuePredicate] count]!=0) {   
        // FOUND
    }

    else  {
       //NOT FOUND
    }
Run Code Online (Sandbox Code Playgroud)


csa*_*ano 5

迭代数组是最好的方法.这正是该containsObject方法在幕后所做的事情.你可以对数组进行排序,但这在效率方面不会给你太多.

如果您希望能够比O(n)更快地查找值,NSArray/NSMutableArray则可能不是适合您的数据结构.

  • NSArray/NSMutableArray是快速查找的正确数据结构!只需使用CFArrayBSearchValues(...) (2认同)