Как мне подсчитать объекты в NSArray, которые имеют определенное значение? - PullRequest
2 голосов
/ 01 сентября 2010

У меня есть NSArray, заполненный 0 и 1. Как я могу вернуть количество 0 в массиве?

Спасибо!

Ответы [ 7 ]

9 голосов
/ 01 сентября 2010

В зависимости от вашего приложения вы можете рассмотреть возможность использования NSCountingSet .

Когда приходит время для подсчета объекта определенного типа, вы можете просто использовать метод countForObject: instance.

Возможно, он слишком тяжел для вашей текущей проблемы, но может быть полезен для других, ищущих аналогичное решение.

6 голосов
/ 01 сентября 2010

Итерация по массиву и подсчет того, что вы ищете.

Предполагается, что у вас NSArray заполнено NSNumber s:

NSArray* array = ... ; // populate array
NSUInteger count = 0;
for (NSNumber* number in array)
{
    if ([number intValue] == 0)
    {
        count++;
    }
}
4 голосов
/ 01 сентября 2010

KeyValueCoding

int count = [array count] - [[array valueForKeyPath:@"@sum.intValue"] intValue];
4 голосов
/ 01 сентября 2010

Немного извращенное решение:)

NSUInteger zeros_count(NSArray *array) {
  NSUInteger sum = 0;
  for (NSNumber *number in array)
    sum += [number intValue];
  return [array count] - sum;
}
1 голос
/ 01 сентября 2010

Объявите счетчик, установите его в 0, выполните цикл по массиву и, если элемент равен 0, увеличьте счетчик.

0 голосов
/ 17 мая 2016
NSArray *arrayWithOnesAndZeros = @[@0, @0, @1, @1, @0, @1, @1, @0, @1];
NSUInteger numberOfZeros = [[NSCountedSet setWithArray:arrayWithOnesAndZeros]countForObject:@0];

Это идеальный метод, когда вы во время выполнения очень мало знаете об объекте, который хотите считать, поэтому вместо @0 вместо него можно поставить anyKindOfObjectWithUnknownValueOrType.

0 голосов
/ 01 сентября 2010
NSArray* array = [[NSArray alloc] ...]; ; // put data into the array

NSUInteger arrayWithValue = 0;

for (NSNumber* number in array)

{

if ([number intValue] == NUMBERYOUARELOOKINGFOR)

    {
        count++;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...