[Xcode] Как посчитать NSArray по типу - PullRequest
0 голосов
/ 04 марта 2012

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

это мой класс данных

+ (id)LocationWithID:(NSString *)UniqueID name:(NSString *)name address:(NSString *)address latitude:(float )latitude longitude:(float )longitude locationtype:(NSString *)locationtype country:(NSString *)country distance:(float )distance;

, а это мой массив

[array addObject:[dataclass LocationWithID:UniqueID name:name address:address latitude:latitude longitude:longitude locationtype:locationtype country:country distance:distance]];

, и я хотел бы посчитать, сколько стран в этом объекте.Обычно мы используем [массив count];но это будет считать все объекты в массиве.Теперь в моем случае я хочу посчитать неповторяющийся объект, например, я получил массив, содержащий 3 Великобритании, 5 США, 7 Япония, 3 Китай, и результат, который я хочу, это тип страны = 4.

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

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Вы можете использовать словарь, чтобы поместить объекты с одной и той же страной в отдельный массив:

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
for (dataclass *location in array) {
    if (![dictionary objectForKey:location.country]) {
        [dictionary setObject:[NSMutableArray array] forKey:location.country];
    }
    [(NSMutableArray *)[dictionary objectForKey:location.country] addObject:location];
}

Теперь не только вы можете получить количество разных стран, например:

int countriesCount = [dictionary count];

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

Вы можете получить все местоположения для определенной страны с именем countryName, например так:

NSArray *locationsForCountry = [dictionary objectForKey:countryName];

Вы также можете получить список всех стран, подобных этой:

NSArray *countries = [[dictionary keyEnumerator] allObjects];
1 голос
/ 04 марта 2012

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

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

0 голосов
/ 04 марта 2012

NSArray сама по себе не имеет этой функциональности, поэтому, как отмечали другие, было бы проще вести отдельный подсчет подсчетов для каждой страны.Лучший способ сделать это - создать объект NSCountingSet и добавить страны к нему при добавлении объектов данных в массив.

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html

Чтобы получить счетчик для любогострана, вы просто вызываете [set countForObject: country].Простой!

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