NSMutableArray содержит объекты - PullRequest
0 голосов
/ 18 января 2012

Я должен проверить, содержит ли NSMutableArray объект несколько раз (например, массив содержит 1,2,3,1,4), я хочу знать, сколько раз 1 присутствует в массиве. Я знаю о containsObject:, но как использовать его для такого рода проверки?

Ответы [ 3 ]

1 голос
/ 18 января 2012

NSCountedSet может помочь, если вы хотите отслеживать, сколько раз встречается повторяющееся значение.

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html#//apple_ref/occ/cl/NSCountedSet

0 голосов
/ 18 января 2012

Это зависит от ваших типов объектов, но если их можно использовать в качестве ключей для NSDictionary, я бы создал NSMutableDictionary, который указывает на объекты NSNumber, содержащие счетчики для каждого экземпляра объекта. Что-то вроде:

NSArray *array = whatever;
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:array.count];
for ( id obj in array )
{
  NSNumber *number = [d objectForKey:obj];
  if ( number == nil )
  {
     [d setObject:[NSNumber numberWithInt:1] forKey:obj];
  }
  else
  {
     [d setObject:[NSNumber numberWithInt:([number intValue]+1) forKey:obj];
  }
}

В конце этого кода у вас остается NSDictionary, где ключи - это ваши исходные объекты, а значения - это NSNumbers, которые содержат количество раз, когда ключ существует в оригинале.

0 голосов
/ 18 января 2012

Быстрый способ - преобразовать его в NSSet, а затем обратно в массив.NSSets не могут содержать дубликаты.Либо скопируйте значения одно за другим в новый массив, используя цикл, и каждый раз проверяйте, что новый массив не содержит копию объекта, прежде чем добавить его.

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