0

我有一个双值数组,其范围可以从 0.0 到 100.0。如果任何值低于 10.0,我想提醒用户。我做了一些搜索,我能找到的最接近的是:

- (BOOL)containsObject:(id)anObject

有什么办法可以使用这种方法来查看值是否低于 10?我尝试了以下代码行,但收到​​了两个错误。

if ([myArray containsObject:[NSNumber numberWithDouble:(<10)])
{
    // Do something
}

我将不胜感激。这似乎是一项非常基本的任务。

4

4 回答 4

5

如果它不是一个包含大量数据的数组,我看不出你为什么不这样做的原因:

   for (NSNumber *number in myArray) {
        if ([number floatValue] < 10.0) {
            // alert user 
        }
    }
于 2013-08-15T13:17:34.997 回答
1

使用NSPredicate更多更快

NSPredicate *predicatePeople =  [NSPredicate predicateWithFormat:@"(startValue => %f) BETWEEN (endValue <= %f))",startNSNumber,endNSNumber];

NSArray *filteredArray = [myArray filteredArrayUsingPredicate:predicatePeople];
if(filteredArray.count > 0)
{
  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Information" message:@"MyArray Contain between 1 to 10 value" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
     [alert show];
}
于 2013-08-15T13:23:35.573 回答
0

此外,使用 ofcontainsObject:是为了“等于”目的,例如[myArray containsObject:[NSNumber numberWithDouble:2.0]],而不是像您所做的那样有条件。所以,最好的是JPetric提到的。

for (NSNumber *number in myArray) {
        if ([number floatValue] < 10.0) {
            // alert user 
        }
    }
于 2013-08-15T13:26:27.267 回答
0

我会使用积木,它们更酷,有助于熟悉它们:

[myArray enumerateObjectsWithBlock^(NSNumber *number, NSUInteger indx, BOOL *stop) {
    if ([number floatValue] < 10.0) {
        // alert user

        // kill the loop to prevent unnecessarily going through all the elements
        stop = YES;
    }
}];

如果您确实想要用户快速枚举,请包含一个中断:

for (NSNumber *number in myArray) {
     if ([number floatValue] < 10.0) 
           // alert user 
           break; // kills the loop
     }
 }

如果您只关心一个项目是否低于 10,那么这些方法效果很好,因为您不需要每次都检查每个元素。此外,如果是这种情况,谓词效率不高,因为它们会过滤整个数组,而实际上您只关心一个项目(10 以下的第一个项目)。

于 2013-08-15T13:37:19.470 回答