проверка всего логического значения NSMutableArray

#objective-c #ios7 #nsmutablearray

#objective-c #ios7 #nsmutablearray

Вопрос:

У меня есть массив, который я заполняю логическими значениями в следующем коде.

 for(int i = 0; i < 15; i  ){
  int checkVal = [(NSNumber *)[__diceValue objectAtIndex:i] intValue];
    if(checkVal == matchVal){
        [_diceMatch replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:y]];
    }
}
  

Какой самый короткий способ написать условие для проверки массива «_diceMatch» на наличие всех истинных значений?

Ответ №1:

Если ваш массив может содержать только значения «true» ( @YES ) или «false» ( @NO ), то вы можете просто проверить отсутствие @NO :

 if (![_diceMatch containsObject:@NO]) {
   // all elements are "true"
}
  

Ответ №2:

 NSUInteger numberOfTrueValues = 0;

for (NSNumber *value in _diceMatch) {
   if ([value boolValue]) {
      numberOfTrueValues  ;
   }
}
  

Ответ №3:

Кратчайший путь? может быть, и нет. Самый простой способ? ДА

 - (BOOL)isDictMatchAllTrue {
    for (NSNumber *n in _dictMatch) {
        if (![n boolValue]) return NO;
    }
    return YES;
}
  

или вам не нравится писать цикл

 NSSet *set = [NSSet setWithArray:_diceMatch];
return set.count == 1 amp;amp; [[set anyObject] boolValue];
  

Примечание: первая версия возвращается YES , когда массив пуст, но возвращается вторая версия NO .

Вы можете добавить

 if (_dictMatch.count == 0) return YES; //or NO
  

чтобы это исправить.