Как искать массив строк - PullRequest
       10

Как искать массив строк

1 голос
/ 22 октября 2011

Я создаю приложение, в котором пользователь может выбрать несколько ячеек из таблицы, и каждый раз, когда ячейка выбирается, она добавляется в NSMutableArray. Таблица содержит названия разных стран. Как только все страны выбраны, как мне искать, какие страны выбраны? Например, как я могу проверить, выбрал ли пользователь, например, Соединенные Штаты?

У меня есть в моем didSelectRow для моей таблицы:

if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
        [listofCountriesselected addObject:[NSNumber numberWithInt:indexPath.row]];

    } 
    else {
        [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
        [listofCountriesselected removeObject:[NSNumber numberWithInt:indexPath.row]];

    }

1 Ответ

2 голосов
/ 22 октября 2011

Вы можете добавить страны в NSMutableArray и проверить, содержит свойствоObject.В этом случае я добавляю строку - вы можете добавить через какой-то идентификатор страны, но вам нужно проверить по тому же идентификатору страны (что бы вы ни выбрали).Номер строки не является хорошим идентификатором - он не стабилен.

NSMutableArray *list = [[NSMutableArray alloc] init];
[list addObject:@"US"];
[list addObject:@"CN"];
NSLog(@"usa? %d", (int)[list containsObject:@"US"]);

Еще более быстрый способ проверить, была ли выбрана страна, заключается в добавлении страны к NSMutableSet при выборе.

NSMutableSet - это хэш-набор, поэтому поиск выполняется очень быстро.

NSMutableSet *lookup = [[NSMutableSet alloc] init];
[lookup addObject:@"US"];
[lookup addObject:@"CN"];

NSLog(@"usa? %d", (int)[lookup containsObject:@"US"]);

Оба вывода 1.

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

Кстати, вот как можно получить все коды стран ИСО

NSArray *countryCodes = [NSLocale ISOCountryCodes];
for (NSString *cc in countryCodes)
{
    NSLog(@"cc: %@", cc);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...