1

for inNSArrayから名前のリストを読み取るためのループを作成しています。これが私のコードです。

NSArray *names = [NSArray arrayWithObjects:@"Luke",@"James",@"Fred",@"Harry", nil];

for (NSString *name in names) {

    NSLog(@"%@",name);

}

私が判断しようとしているのは、ループの外側に変数を追加せずに、現在のループ番号を取得する簡単な方法があるかどうかです。

int number = 0;

for (NSString *name in names) {

    number++;
    NSLog(@"%i - %@",number,name);

}

forループ中にアクセスできる組み込みの「ループ番号」プロパティはありますか?-私は間違った木を吠えていますか?変数を使用してそれを乗り越える必要がありますか?

4

3 に答える 3

1

インデックスが必要な場合は、標準の 3 部構成の for ループを使用するか、numberwhile ループを含むカウンターを使用します。for...inスタイルループで魔法のようにインデックスを取得する方法はありません。

于 2013-02-18T19:29:01.253 に答える
1

あなたがしたことは合理的です(ただしnumber++、ループの最後に置きます)。通常、ループ インデックスが必要な場合は、高速な列挙を避けて、より伝統的な for ループを使用します。

for (NSUInteger i=0; i<[names count]; i++) {
    NSString *name = names[i];
    NSLog(@"%i - %@", i, name);
}
于 2013-02-18T19:29:28.427 に答える
1

これはかなりのハックのようです。高速列挙の代わりに通常の for ループを使用するか、ブロックを使用してオブジェクトを列挙するか、またはindexOfObject:for ループ内でメソッドを使用することもできます (ただし、これは、一意のオブジェクトのみが含まれている場合にのみ機能するため、実際には推奨されません)。とにかく、検索を繰り返すと速度が低下します)。全体として、これを試してください:

int i;
for (i = 0; i < names.count; i++) {
    NSString *name = [names objectAtIndex:i];
    // and "i" already stores the index
}

またはこれ:

[names enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    // use obj and idx
}];

これも可能ですが、実行しないでください。

for (NSString *name in names) {
    int idx = [names indexOfObject:name];
    // etc.
}
于 2013-02-18T19:33:09.657 に答える