如何使用Objective-C测试数字是否在范围内?

我有一个非常基本的问题。 我想知道这是否是Objective-C或C中的内置函数,以帮助我找到特定数字是否在某个范围内。 我知道这可能是一个简单的问题,但我仍然没有找到答案。 在短期内,我们希望避免在此测试中使用多个“if”和“else”。

  NSLocationInRange(c,NSMakeRange(a,(b  -  a))) 

如果c位于a和b内,则返回BOOL。 但是,a,b和c必须是unsigned int。 这真的不是很好看。 所以我想比较自己要好得多。

  c> = a && c <= b 

你在C,C ++,Java,C#中的表现方式相同……

if (theNumber >= SOME_MINIMUM_VALUE && theNumber <= SOME_MAXIMUM_VALUE) { // ... } 

这是一个“包容性”范围检查。 应该很容易弄清楚如何进行“独家”检查。

没有内置function,但也没有办法比我熟悉的任何架构上的两个条件更有效。 任何函数或宏最终都会归结为与上面相同。

如果你担心它会很慢,那就不要了 。 如果您确实发现这在某种程度上是一个瓶颈,那么只关心性能。 过早优化不值得你花时间。

添加此方法:

 - (BOOL)float:(float)aFloat between:(float)minValue and:(float)maxValue { if (aFloat >= minValue && aFloat <= maxValue) { return YES; } else { return NO; } } 

并像这样使用它:

 float myFloat = 3.45; if ([self float:myFloat between:3 and:4]) { //Do something } 

这是一个非常简单的解决方案。

好吧,我不相信有内置function,但你可以在几秒钟内编写自己的function。

只是

 return (theInt >= min && theInt <= max); 

这样做将被解释为:c> = a && c

  NSLocationInRange(c,NSMakeRange(a,(b  -  a))) 

如果你想比较如下:c> = a && c <= b你应该这样做:

  NSLocationInRange(c,NSMakeRange(a,(b  -  a)+ 1)) 

NSRange是一个结构:

 { location, // Starting point length // Length from starting point to end range } 

所以如果你想要一个5到15的范围包括—–> NSMakeRange(5,11);

*如果您有点不安,只需用手指从5到15计数;)。 当我到达这个难以思考的夜晚时,我就是这样做的:p

如果你正在使用Signed int,我建议你创建一个宏;)

 #define MY_AWESOME_MACRO_COMPARE(c, a, b) ((c >= a) && (c <= b)) 

希望我帮助:)

干杯;)!

在Objective-C中,您可以使用这个简单的检查:

 if (variable >= MINVALUE && variable <= MAXVALUE) { NSLog(@" the number fits between two numbers"); } else { NSLog(@" the number not fits between two numbers"); } BOOL FitsBetweenTwoNumber = NSLocationInRange(variable, NSMakeRange(MINVALUE, (MAXVALUE - MINVALUE))); if (FitsBetweenTwoNumber) { NSLog(@" the number fits between two numbers"); } else { NSLog(@" the number not fits between two numbers"); } 

您可以使用NSPredicate判断数组是否在范围内,如果您使用CoreData,请执行以下操作:

 NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", MINVALUE, MAXVALUE]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context]]; [request setPredicate:predicate]; NSError *error = nil; NSArray *results = [context executeFetchRequest:request error:&error]; if (error == nil) { if(results.count >0) { NSLog(@" the number fits between two numbers"); } else { NSLog(@" the number not fits between two numbers"); } } else if (error) { NSLog(@"%@", error); } 

如果你不使用coreData,你也可以使用NSPredicate:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", MINVALUE, MAXVALUE]; NSArray *results = [@[@(variable)] filteredArrayUsingPredicate:predicate]; if(results.count >0) { NSLog(@" the number fits between two numbers"); } else { NSLog(@" the number not fits between two numbers"); }