Найти индекс NSArray, передав значение - PullRequest
8 голосов
/ 26 мая 2011

Возможно ли в NSArray узнать, существует ли заданное значение в массиве (без поиска его с помощью цикла for)?Любой случайный метод по умолчанию.Я просмотрел документацию , но не нашел ничего подходящего.

Пожалуйста, расскажите также о методе valueForKey (я не смог получить его из документа).

Ответы [ 5 ]

10 голосов
/ 26 мая 2011

Метод containsObject: обычно дает вам то, что вы спрашиваете - в то время как его имя звучит так, будто вы запрашиваете конкретный экземпляр (то есть два объекта с одинаковым семантическим значением не соответствует) на самом деле он вызывает isEqual: на объектах, поэтому тестирует по значению .

Если вы хотите индекс предмета, как подсказывает ваш заголовок, используйте indexOfObject:, он также вызывает isEqual:, чтобы найти совпадение.

valueForKey: для случаев, когда у вас есть массив словарей; он ищет ключ в каждом словаре и возвращает массив результатов.

6 голосов
/ 26 мая 2011

Полагаю, вы хотите использовать метод indexOfObject.Из документации :

indexOfObject:

Возвращает самый низкий индекс, соответствующее значение массива которого равно данному объекту.

- (NSUInteger)indexOfObject:(id)anObject

Параметры

anObject

An object.

Возвращаемое значение

Самый низкий индекс, соответствующее значение массива которого равноanObject.Если ни один из объектов в массиве не равен anObject, возвращается NSNotFound.

Обсуждение

Объекты считаются равными, если isEqual: возвращает YES.

Важно : Если anObject равно nil, возникает исключение.

4 голосов
/ 26 мая 2011

Вы можете использовать:

NSInteger idx = [myArray indexOfObject:obj]; 

чтобы найти индекс объекта.
И чтобы проверить, есть ли объект в массиве или нет, вы можете использовать:

- (BOOL)containsObject:(id)anObject 
0 голосов
/ 15 декабря 2014

Объединить objectAtIndex и indexOfObject так:

[tmpArray objectAtIndex:[tmpArray indexOfObject:yourObject]];
0 голосов
/ 26 мая 2011

Используйте NSPredicate для фильтрации NSArray на основе NSDictionary

array = [dictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key == %@)", value]];

if([array count]>0)
{
value exists;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...