Как проверить, находится ли число в диапазоне с помощью Objective-C?
У меня есть очень простой вопрос. Я хотел бы знать, есть ли встроенная функция в Objective-C или C, чтобы помочь мне найти, если определенное число это в определенном диапазоне. Я знаю, что это, вероятно, простой вопрос, но я еще не нашел ответа. В краткосрочной перспективе хотелось бы избежать использования нескольких "if" и "else" для этого теста.
Ответы
Ответ 1
NSLocationInRange(c, NSMakeRange(a, (b - a)))
Это возвращает BOOL, если c лежит внутри a и b. Однако a, b и c должны быть неподписанными int. И это действительно не очень хорошо выглядит. Поэтому я думаю, что лучше сравнивать себя.
c >= a && c <= b
Ответ 2
То же самое, что вы делаете в C, С++, Java, С#...
if (theNumber >= SOME_MINIMUM_VALUE && theNumber <= SOME_MAXIMUM_VALUE)
{
// ...
}
Это проверка "включительно". Должно быть легко выяснить, как выполнить "эксклюзивную" проверку.
Нет встроенной функции, но также нет способа сделать это более эффективным, чем два условия для любой архитектуры, с которой я знаком. Любая функция или макрос в конечном итоге сводится к тому же, что и выше.
Если вы беспокоитесь, что это будет медленным, тогда не делайте этого. Только беспокоиться о производительности, если вы действительно видите, что это как-то узкое место. Преждевременная оптимизация не стоит вашего времени.
Ответ 3
Добавьте этот метод:
- (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
}
Это очень простое решение.
Ответ 4
Ну, я не верю, что есть встроенная функция, но вы можете писать свои собственные за несколько секунд.
просто
return (theInt >= min && theInt <= max);
Ответ 5
Выполнение такого действия будет интерпретироваться как: 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))
Надеюсь, я помог:)
Приветствия!)!
Ответ 6
В 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");
}