【问题标题】:How to search array of strings如何搜索字符串数组
【发布时间】:2011-10-22 03:06:57
【问题描述】:

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

    }

【问题讨论】:

    标签: iphone ios arrays uitableview nsmutablearray


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

    顺便说一句,这是获取所有 ISO 国家/地区代码的方法

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

    【讨论】:

    • 以前从未想过哈希组件。喜欢学习东西! +1
    猜你喜欢
    • 2011-07-22
    • 2022-01-23
    • 2022-01-23
    • 2014-10-06
    • 2012-01-13
    • 2012-06-12
    相关资源
    最近更新 更多