2011-10-22 15 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はcontainsのために最適化されています。たとえば、選択したものだけでなく、選択した順序を追跡するだけでなく、変更可能な配列が必要な場合もあります。また、アプリが注文に答えるための集計データ構造を含み、タイプの質問を含むことも珍しくありません。

ところで、ここにあなたが

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

は前にハッシュ要素を考えたことがなかった、すべてのISO国コードを得ることができる方法です。物事を学ぶことを愛する! +1 – NJones