4

ループを考えてみましょう。また、高速な列挙にも興味があります。だから、それは可能性があります

  • どちらかfor(id obj in objects)
  • または[objects enumerate... ]

Objective-Cループの最初の要素と他の要素を区別する古典的または適切な方法 ( ) があるかどうかを知りたいです。もちろん、最後の要素を他の要素と区別する良い方法だけがあれば、私も興味があります。

ループの最初または最後の要素に異なる命令を適用する古典的または適切な方法はありますか?

4

5 に答える 5

5

古典的なforループで最も簡単ですが、高速な列挙が必要なため、独自のカウンターが必要です。

NSUInteger index = 0;
NSUInteger count = objects.count;
for (id obj in objects) {
    if (index == 0) {
        // first
    } else if (index == count - 1) {
        // last
    } else {
        // all others
    }

    index++;
}

の場合objects、次のNSArrayことができます。

[objects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if (idx == 0) {
        // first
    } else if (idx == objects.count - 1) {
        // last
    } else {
        // all others
    }
}];
于 2013-10-15T17:41:11.900 に答える
0

enumerateObjectsUsingBlock は、順序どおりのループを保証しないことに注意してください。あなたが探しているかもしれないものの古典的な例:

const NSInteger sizeOfArray = 10;
NSInteger numbers[sizeOfArray] = {10,20,30,40,50,60,70,80,90,100};

NSInteger i = 0;

do {
    switch (i) {
        case 0:
            NSLog(@"First");
            break;
        case sizeOfArray:
            NSLog(@"Last");
            break;
        default:
            NSLog(@"All others");
            break;
    }
    NSLog(@"Number = %i", numbers[i++]);
}while (i < sizeOfArray);
于 2013-10-15T20:21:48.783 に答える
0

私もこれらの NSArray メソッドを使用することをお勧めします:-

 - (void)enumerateObjectsUsingBlock:(void (^)
   (id obj, NSUInteger idx, BOOL *stop))block
于 2013-10-15T17:57:44.573 に答える
0

FOR の一般的なステートメントを使用すると、次のことができます。

for (int i = 0; i < [myArray count]; i++)
{
    if(i == 0)
        NSLog("First");

    if(i == [myArray count] - 1)
        NSLog("Last");

    //rest of your code
}
于 2013-10-15T17:38:59.307 に答える