我正在创建一个应用程序,用户可以从表中选择多个单元格,每次选择一个单元格时,都会将其添加到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]];
}
答案 0 :(得分:2)
您可以将国家/地区添加到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进行了优化 - 只是一个集合。例如,如果您不仅要跟踪选择的内容,而且还要跟踪他们选择的顺序,那么您需要一个可变数组。应用程序包含聚合数据结构以回答排序并包含类型问题也是不常见的。
BTW,以下是获取所有ISO国家/地区代码的方法
NSArray *countryCodes = [NSLocale ISOCountryCodes];
for (NSString *cc in countryCodes)
{
NSLog(@"cc: %@", cc);
}