Сравните int с массивом целых чисел Obj-C
Как мне узнать, находится ли мое целое число в массиве целых чисел...
например, я хочу знать, находится ли 7 в массиве [ 1 3 4 5 6 7 8]
есть идеи?
Спасибо
3 ответа
Есть несколько способов сделать это в зависимости от таких факторов, как размер массива - как часто вам нужно искать, как часто вам нужно добавлять в массив и т. Д. В общем, это проблема компьютерных наук.
Точнее, я думаю, есть три варианта, которые могут лучше всего соответствовать вашим потребностям.
- "Грубая сила": просто переберите массив в поисках значения. призвание
containsObject:
наNSArray
сделаю это для вас. Простой и, вероятно, самый быстрый для небольших массивов. - Скопируйте массив в набор и используйте
containsObject:
проверить на существование - Сохраняйте значения в массиве, но сортируйте массив и реализуйте свой собственный двоичный поиск - который, вероятно, не так сложен, как кажется.
Это зависит от типа вашего массива, если это объект или массив 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
}