Сравните int с массивом целых чисел Obj-C - PullRequest
1 голос
/ 12 апреля 2010

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

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

есть идеи?

Спасибо

Ответы [ 3 ]

6 голосов
/ 12 апреля 2010

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

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

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

Это зависит от типа вашего массива, если это объект или массив 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
    }
}
0 голосов
/ 04 января 2011
//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
}
...