Цель C Оператор логического ИЛИ не оценивается в блоке
Я пытаюсь проверить, какие значения элемента массива равны друг другу или NSNumber
10. Массив имеет количество 15. Проблема в том, что когда я проверяю значение NSNumber
10 в if statement
Код, похоже, не оценивает.
Например, в приведенном ниже массиве код должен возвращать, что значение в индексе 0 присутствует в индексах {0, 9, 10}, поскольку NSNumber
1 присутствует в индексах 0 и 10 и NSNumber
10 присутствует в индексе 9.
1-2-3-4-5-6-7-8-9-10-1-2-3-4-5
Тем не менее, он только оценивает, NSNumber
значение в индексе 0 равно NSNumber
1 и не NSNumber
10. Вывод не такой, как ожидалось, {0, 9, 10}, а только {0, 10}.
for (NSNumber *number in mutableArray) {
self.matchingIndex = [mutableArray indexesOfObjectsPassingTest:
^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop)
{
BOOL returnValue;
NSNumber *ten = [NSNumber numberWithInt:10];
if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])
{
returnValue = TRUE;
}
return returnValue;
}];
[self testIndexSet:self.matchingIndex];
}
1 ответ
Ваше ожидание неверно. number
итератор внешнего цикла будет равен десяти только для элемента @10 в массиве. Ожидаемый результат для цикла - два индекса для элементов 1..5 и один индекс для остальных.
Если вы хотите, чтобы цикл нашел элемент @10 и включал его в каждый результат, измените условие с...
if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])
чтобы...
if ([number isEqualToNumber:obj] || [obj isEqualToNumber:ten])
Кстати, блок можно обозначить более просто как...
NSIndexSet *matchingIndex = [mutableArray indexesOfObjectsPassingTest:^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) {
return ([number isEqualToNumber:obj] || [obj isEqualToNumber:@10]);
}];