iPhone, как получить список уникальных предметов в массиве? - PullRequest
0 голосов
/ 24 апреля 2011

Допустим, у меня есть NSArray, полный объектов животных, и их имена являются строковыми атрибутами.Когда я выполняю итерацию по массиву, как я получу подсчет схожих имен?

Кошка - Количество бобов: 1

Собака - Количество Салли: 1

Кошка -Количество бобов: 2

Банни - Количество бобов: 3

Рыба - Количество Салли: 2

Как бы получить эти целые, если имена динамические, а не статические?

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

Самый простой способ - использовать NSMutableDictionary.Для каждого имени попытайтесь получить NSNumber для этого имени из словаря.Если он был найден, добавьте 1 и сохраните его;если нет, создайте новый со значением 1 и сохраните его.

0 голосов
/ 24 апреля 2011

Я думаю, вы могли бы использовать NSMutableDictionary для хранения количества имен.

Что-то вроде:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithCapacity:10];

NSString *name = [NSString stringWithFormat:@"Bob"];    
NSNumber *number = (NSNumber *)[dic objectForKey:name];

if (number == nil) // There is no occurrence of the name in Dictionary
{
    number = [NSNumber numberWithInt:1];
    [dic setObject:number forKey:name];
}
else // There is already an occurrence of the name in dictionary, so increment counter
{
    number = [NSNumber numberWithInt:(number.intValue + 1)]; // Increments counter for Name
    [dic objectForKey:name];
}

Строка "NSNumber * number = (NSNumber *) [dic objectForKey: name] "извлекает число раз, когда определенное имя появлялось.

Вы также можете использовать [dic allKeys];восстановить все имена в этом словаре.

...