在Objective-C中检查一个整数值数组,看看是否至少有一个> 0

时间:2013-10-24 15:56:56

标签: ios objective-c arrays cocoa-touch if-statement

我问了一个类似的问题来测试一个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;
}

2 个答案:

答案 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");
}

无论如何,它变得越复杂,你希望它工作越复杂,但它应该非常简单