2011-10-22 125 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