Найти объекты с одинаковым значением свойства в NSMutableSet - PullRequest
5 голосов
/ 07 мая 2011

У меня есть NSMutableSet объектов.Все объекты уникальны, но они могут иметь одинаковое значение .angle , которое является свойством NSInteger.

Мне нужно выяснить, есть ли два или более объектов с одинаковым .angle значение и группа затем в массив.

Как я могу это сделать?
Любое руководство будет высоко ценится

Ответы [ 3 ]

12 голосов
/ 07 мая 2011

Используйте экземпляр NSPredicate для фильтрации интересующего вас свойства. Например:

NSSet *dogs = [NSSet setWithObjects:
                [Dog dogWithName:@"Fido" age:2],
                [Dog dogWithName:@"Fluffy" age: 3],
                [Dog dogWithName:@"Spot" age:2],
                nil];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age == %d", 2];
NSSet *twoYearOldDogs = [dogs filteredSetUsingPredicate:predicate];

NSLog(@"%@", twoYearOldDogs);
0 голосов
/ 07 мая 2011

Вы можете использовать sortUsingFunction: context: метод NSMutableArray.(Хотя для сортировки вы можете выполнить свою задачу с большей эффективностью).

  NSComparisonResult compare(YourClass *firstObject, YourClass *secondObject, void *context) {
  if ([firstObject angle] < [secondObject angle])
    return NSOrderedAscending;
  else if ([firstObject angle] > [secondObject angle])
    return NSOrderedDescending;
  else 
  {
    //Normally here NSOrderedSame is returned. 
    //Put your logic stuff here.i.e. storing object for having common angle.
  }
}

Надеюсь, это поможет.

0 голосов
/ 07 мая 2011

Может зависеть от того, насколько велики ваши данные.Если он большой, вам, возможно, придется отсортировать по .angle и искать дубликаты.Простой способ - просто создать копию набора данных, выполнить итерацию, для элемента N посмотреть на N + 1 до конца для всех с одинаковым .angle и, если он найден, удалить их из этого набора копий и добавить в выходной набор.

...