Сравните int с массивом целых чисел Obj-C

Как мне узнать, находится ли мое целое число в массиве целых чисел...

например, я хочу знать, находится ли 7 в массиве [ 1 3 4 5 6 7 8]

есть идеи?

Спасибо

3 ответа

Решение

Есть несколько способов сделать это в зависимости от таких факторов, как размер массива - как часто вам нужно искать, как часто вам нужно добавлять в массив и т. Д. В общем, это проблема компьютерных наук.

Точнее, я думаю, есть три варианта, которые могут лучше всего соответствовать вашим потребностям.

  1. "Грубая сила": просто переберите массив в поисках значения. призвание containsObject: на NSArray сделаю это для вас. Простой и, вероятно, самый быстрый для небольших массивов.
  2. Скопируйте массив в набор и используйте containsObject: проверить на существование
  3. Сохраняйте значения в массиве, но сортируйте массив и реализуйте свой собственный двоичный поиск - который, вероятно, не так сложен, как кажется.

Это зависит от типа вашего массива, если это объект или массив C. Судя по вашим тегам, у вас есть NSArray с NSIntegers, это было бы неправильно. NSIntegers не являются объектами и не могут быть помещены в NSArray, если вы не заключите их в объект, например NSNumber.

NSArray

Использовать containsObject: метод.

Я не совсем уверен, как вы помещаете свои целые числа в NSArray. Обычный способ сделать это - использовать NSNumber.

NSArray *theArray = [NSArray arrayWithObjects:[NSNumber numberWithInteger:1],
                                              [NSNumber numberWithInteger:7],
                                              [NSNumber numberWithInteger:3],
                                              nil];
NSNumber *theNumber = [NSNumber numberWithInteger:12];
/*
 * if you've got the plain NSInteger you can wrap it
 * into an object like this:
 * NSInteger theInt = 12;
 * NSNumber *theNumber = [NSNumber numberWithInteger:theInt];
 */
if ([theArray containsObject:theNumber]) {
    // do something
}

C-массив

Я подозреваю, что вы используете C-Array. В этом случае вы должны написать свой собственный цикл.

NSInteger theArray[3] = {1,7,3}
NSInteger theNumber = 12;
for (int i; i < 3; i++) {
    if (theArray[i] == theNumber) {
        // do something
        break; // don't do it twice
               // if the number is twice in it
    }
}
//assume these data, either from a method call or instance variables
int theArray[7] = {1,7,3,8,5,7,4};
int numberIWant = 8;

//this is the essence in a C-array, which you can easily use on ios
BOOL isNumberFound = NO;
for (int i; i < sizeof(theArray)/sizeof(int); i++) {
    if (theArray[i] == numberIWant) {
        isNumberFound = YES;
        break; //breaks the for loop               
    }
}
//return the bool, or otherwise check the bool

if (isNumberFound)
{
//do stuff
}
Другие вопросы по тегам