2015-04-05 2 views
-1

У меня есть NSArray с объектами простого пользовательского класса CustomClass, содержащие два свойства:Получение числа равных свойств пользовательского класса в NSArray

@interface CustomClass : NSObject 

@property (nonatomic) NSString *term; 
@property (nonatomic) NSString *tag; 

@end 

Моя цель состоит в том, чтобы выяснить, какие теги наиболее используются на объектах в массиве.

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

Каков наилучший способ приблизиться к этому? Можно ли это сделать, используя NSPredicate и filteredArrayUsingPredicate?

+0

http://stackoverflow.com/questions/29096448/how-to-compare-the-elements-of-nsarray-in-nsmutabledictionary/29097240#29097240? – Larme

ответ

3
NSCountedSet* countedSet = [NSCountedSet setWithArray:[yourArray valueForKey:@"tag"]]; 
NSUInteger highestCount = 0; 
NSString* mostCommonTag; 
for (NSString* tag in countedSet) 
{ 
    NSUInteger count = [countedSet countForObject:tag]; 
    if (count > highestCount) 
    { 
     highestCount = count; 
     mostCommonTag = tag; 
    } 
} 

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

+0

Просто, чтобы быть ясным «первым» в этом случае, по сути, означает «случайный», поскольку в NSCountedSet нет встроенного порядка. –

+0

Да, хорошая точка. –

Смежные вопросы