2011-10-22 103 views
1

我正在创建一个应用程序,用户可以从表中选择多个单元格,并且每次选择一个单元格时,都会将其添加到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]]; 

    } 

回答

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针对包含进行了优化 - 只是一个集合。例如,如果您不仅想要跟踪选择的内容,而且还要跟踪他们选择的顺序,那么您需要一个可变数组。应用程序包含聚合数据结构以回答排序并包含类型问题也很常见。

BTW,这里是你如何能得到所有的ISO国家代码

NSArray *countryCodes = [NSLocale ISOCountryCodes]; 
for (NSString *cc in countryCodes) 
{ 
    NSLog(@"cc: %@", cc); 
} 
+2

以前从未想过的哈希组件。爱学习的东西! +1 – NJones