【iPhone SDK】NSArray内に登録したデータの重複チェック

NSArrayを継承しているNSMutableArrayの型にオブジェクトを動的に登録していくシーンがあり、
一度追加したデータがもう一度追加される場合があったので、
重複チェックをいれないといけなくなりました。

サーバーからデータを取得するシチュエーションで、
初回取得→追加取得となる場合に、データが更新されてしまうと起きてしまうっというケースですね。
NSMutableArray* data = [[NSMutableArray alloc] init];

まず型を定義し、データを追加します。

[data addObject: @"TEST"];

[data addObject: @"TEST"];

極端な例ですが上記のコードでデータの重複になりますね。
既に同じデータが配列に登録されているかをチェックする方法として
そのデータのインデックス値を調べる方法で行いました。

int index = [data indexOfObjectIdenticalTo: @"TEST"];

この値の遷移を上のコードにいれてみた結果
int index;
 
index = [data indexOfObjectIdenticalTo: @"TEST"];
NSLog(@"index = %d", index);  ←index = -1

[data addObject: @"TEST"];

index = [data indexOfObjectIdenticalTo: @"TEST"];
NSLog(@"index = %d", index);  ←index = 0

if(index < 0){
 [data addObject: @"TEST"];
}

このように対処することができますね。

配列にデータ登録されていない場合、-1が返り、
データが登録されていると登録されたインデックス値が(0~)返ってきます。

つまり0以上の値が返ってくると既に登録ずみだと判断ができるようですね。



--------(追記)

はい、もっといい方法がありました。

BOOLで取れるメソッドが用意されていました。

-(BOOL)containsObject:(id)anObject;

これを使えば簡単に判別できます。

// NOの場合、未登録
if( ![data containsObject: @"TEST"] ){
 // 登録
 [data addObject: @"TEST"];
}

なんて簡単 OTL

この記事へのコメント


この記事へのトラックバック