« Interface Builderと文字コードとバックスラッシュ | Main | G弾劾凰 »

Cocoa Tips : NSArray

配列の要素全部について何かをするとき、Cなら


for ( i=0; i < array_count ; i++ ){
if (array[i] == hogehoge ){
...
}
}

みたいにやるけど、NSArrayでこれをやるとすると

int max = [array count];
int i;
for ( i = 0; i< max; i++){
if( [[array objectAtIndex:i] isEqualTo:hogehoge]){
...
}
}

ってな感じで、あんまし効率が良くない。そういう場合のために、NSEnumeratorというクラスが用意されている。ちなみに、enumerateは「数え挙げる」「列挙する」という意味。発音はイニュマレイターでいいのかしらん?

NSEnumerator *enumerator = [array objectEnumerator];
id theObject;
while( theObject = [ enumerator nextObject] ){
...
}

ってな感じ。-nextObjectメソッドは順番に配列に格納されたオブジェクトを返す。nilが返ってきたら終わり。ちなみに、逆順にオブジェクトを調べたいときは、
[array reverseObjectEnumerator];
を使えばいい。
配列の中の、オブジェクトのインデックスを知りたい場合。
[array indexOfObject:theObject];
を使う。forループ組んで、objectAtIndex:にisEqualTo:を送っていると結構時間がかかるのでやめた方がいい。これでループ処理がかなり速くなる。注意点として、-indexOfObject は、オブジェクトが見つからなかった場合

enum {
NSNotFound = 0x7fffffff
};

を返すということ。これはMacOS Xのgccにおけるintで、正の値になっている。見つからなかったら負の値を返すものとまるで根拠なく思っていて、
if (result >=0){
	...
}
みたいな判断をしてはまった。ちゃんとドキュメント読めよ。

|

« Interface Builderと文字コードとバックスラッシュ | Main | G弾劾凰 »

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53293

Listed below are links to weblogs that reference Cocoa Tips : NSArray:

« Interface Builderと文字コードとバックスラッシュ | Main | G弾劾凰 »