我问了一个类似的问题来测试一个Bool值数组here,但现在我已经改变了它,所以值现在是整数值,我想看看它们中是否有正值。
例如,我在循环中添加了10个新对象,如下所示,然后在某些时候,有些可能会发生变化,然后我需要进行测试。可能是我不使用NSNumber,只要我从中获得一个int。
// I create an array like
NSMutableArray *MyArray = [[NSMutableArray alloc]init];
for (int count = 0; count < 10; count++)
{
[MyArray addObject:[NSNumber numberWithInt:0]];
}
// At some point I change a value or two
[MyArray replaceObjectAtIndex:3 withObject:[NSNumber numberWithInt:5]];
....
....
....
....
[MyArray replaceObjectAtIndex:3 withObject:[NSNumber numberWithInt:7]];
if([MyArray containsPositiveObject])
{
// Get the integer
int MyValue = [MyArray[4]integerValue];
}
修改
我试过这个并且它有效,但想知道是否有更快的方法。
if([self containsPositiveValue:selectedItems])
{
// Do my stuff
}
然后
-(bool)containsPositiveValue:(NSArray *)numberArray
{
bool result = NO;
for (NSNumber *obj in numberArray)
{
if([obj integerValue])
{
result = YES;
break;
}
}
return result;
}
答案 0 :(得分:0)
试试这个。
NSArray *array = @[ @(-1) , @(-3) , @(0) , @(-4) , @(2) , @(-1) ]; // zero is not positvie or negitive
NSArray *newArray = [array filteredArrayUsingPredicate: [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return ( [evaluatedObject isKindOfClass:[NSNumber class]] && ([evaluatedObject integerValue] > 0) );
return NO;
}]];
if (newArray.count)
{
NSLog(@"There are positive values");
}
else
{
NSLog(@"There are no positive values") ;
}
答案 1 :(得分:0)
当然最简单的方法是:
NSArray * array = @[@(-1), @(-5), @(-5)];
for (NSNumber * number in array) {
if (number.intValue > 0) {
NSLog(@"Positive Values");
// Add custom code here
break;
}
}
然后,这将检查数组中的至少一个项是否大于零,然后可以实现自定义代码。
我认为这取决于你是否想要在没有正值的情况下执行某些操作,如果存在不同的东西则会有所不同?
您可以随时添加以下内容:
NSArray * array = @[@(-1), @(-5), @(-5)];
NSInteger largestValue = 0;
for (NSNumber * number in array) {
if (number.intValue > largestValue) {
largestValue = number.intValue;
}
if (largestValue > 0) {
break;
}
}
if (largestValue > 0) {
NSLog(@"Positive Value");
}
else {
NSLog(@"All Negative Values");
}
无论如何,它变得越复杂,你希望它工作越复杂,但它应该非常简单