2010-05-04 73 views
6

我有一个充满bools(表示为数字)的NSArray,我需要测试以查看数组中的任何对象是否等于1.我该怎么做?充满bool对象的NSArray

+0

哟哟你的意思是布尔对象? – 2010-05-04 22:43:36

+0

文章编辑为ans。问题 – 2010-05-04 22:46:13

+0

您是否试图将整数添加到NSArray?因为这是无法完成的。 – 2010-05-04 22:47:51

回答

12

BOOL不是对象。假设你的意思是表示一个像NSNumber这样的布尔值的对象,它实现了一个合适的isEqual:,你可以做一些像[array containsObject:[NSNumber numberWithBool:YES]]这样的事情。

+0

哇。我不知道它可以这样使用。谢谢!!! – 2010-05-04 22:52:35

6

正如Chuck所说,使用-[NSArray containsObject:[NSNumber numberWithBool:YES]]。作为一个思想实验,这里有一些其他的方式来实现目标...

您使用NSPredicate或使用新的模块API可以这样做:

NSArray *myArr //decleared, initialized and filled 

BOOL anyTrue = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"boolValue == 1"]].count > 0; 

BOOL anyTrue = [myArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    if([obj boolValue]) { 
    *stop = YES; 
    } 
    return [obj boolValue]; 
}].count > 0; 

您也可以使用Key-Value编码,但我不确定它的相对效率:

[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0; 
+3

这个bool-summing KVC版本非常可怕。 – Chuck 2010-05-04 23:03:26

+0

@Chuck,是的,我只是有点儿必须阅读真正的代码中的任何解决方案。虽然有趣的小功能编程脑锻炼。 – 2010-05-05 19:26:45