【发布时间】:2010-05-04 22:39:03
【问题描述】:
我有一个用布尔值(表示为数字)填充的 NSArray,我需要测试看看数组中是否有任何对象等于 1。我该怎么做?
【问题讨论】:
-
bool 对象是什么意思?
-
您是否尝试将整数添加到 NSArray?因为那做不到。
我有一个用布尔值(表示为数字)填充的 NSArray,我需要测试看看数组中是否有任何对象等于 1。我该怎么做?
【问题讨论】:
BOOL 不是对象。假设你的意思是一些对象表示一个像 NSNumber 这样的布尔值,它实现了一个正确的isEqual:,你可以做一些像[array containsObject:[NSNumber numberWithBool:YES]] 这样的事情。
【讨论】:
正如 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;
你也可以使用键值编码,虽然我不确定它的相对效率:
[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0;
【讨论】: