#iphone #ios #arrays #uitableview #nsmutablearray
#iPhone #iOS #массивы #uitableview #nsmutablearray
Вопрос:
Я создаю приложение, в котором пользователь может выбирать несколько ячеек из таблицы, и каждый раз, когда выбирается ячейка, она добавляется в 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:
Вы можете добавить страны в NSMutableArray и проверить containsObject . В этом случае я добавляю строку — вы можете добавить с помощью некоторого идентификатора страны, но вам нужно проверить по тому же идентификатору страны (независимо от того, что вы выберете). Номер строки не является хорошим идентификатором — он нестабилен.
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 оптимизирован для contains — просто набор. Например, если вы хотите отслеживать не только то, что выбрано, но и порядок, в котором они их выбрали, тогда вам нужен изменяемый массив. Приложения также нередко содержат агрегированные структуры данных для ответа на вопросы о порядке и типах.
Кстати, вот как вы можете получить все коды стран ISO
NSArray *countryCodes = [NSLocale ISOCountryCodes];
for (NSString *cc in countryCodes)
{
NSLog(@"cc: %@", cc);
}
Комментарии:
1. Никогда раньше не думал о компоненте хэша. Люблю учиться! 1