0

どの配列要素の値が互いに等しいか、またはNSNumber10 に等しいかを確認しようとしています。配列のカウントは 15 です。問題は、 で値をNSNumber10に対してテストするif statementと、コードが評価されないように見えることです。

たとえば、以下の配列では、NSNumber1 がインデックス 0 と 10 にNSNumber存在し、10 がインデックス 9 に存在するため、コードはインデックス 0 の値がインデックス {0, 9, 10} に存在することを返す必要があります。

1-2-3-4-5-6-7-8-9-10-1-2-3-4-5

ただし、インデックス 0 の値が 10ではなく 1 にNSNumber等しいかどうかのみを評価します。出力は期待どおりの {0, 9, 10} ではなく、{0, 10} のみです。NSNumberNSNumber

for (NSNumber *number in mutableArray) {
    self.matchingIndex = [mutableArray indexesOfObjectsPassingTest:
                         ^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) 
    {
        BOOL returnValue;
        NSNumber *ten = [NSNumber numberWithInt:10];
        if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])
        {
            returnValue = TRUE;
        }
        return returnValue;  
    }];
    [self testIndexSet:self.matchingIndex];
}     
4

1 に答える 1

1

あなたの期待は間違っています。 number、外側のループ反復子は、配列内の @10 要素に対してのみ 10 に等しくなります。ループの予想される結果は、1..5 要素の 2 つのインデックスと、残りの 1 つのインデックスです。

ループで @10 要素を検索し、それをすべての結果に含めたい場合は、条件を次のように変更します。

if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])

に...

if ([number isEqualToNumber:obj] || [obj isEqualToNumber:ten])

ちなみに、ブロックはもっと簡単に言うと...

NSIndexSet *matchingIndex = [mutableArray indexesOfObjectsPassingTest:^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) {
    return ([number isEqualToNumber:obj] || [obj isEqualToNumber:@10]);
}];
于 2015-12-30T03:48:48.953 に答える