Как проверить, находится ли число в диапазоне с помощью 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");
}