0

我正在尝试检查哪个数组元素的值彼此相等或等于NSNumber10。数组的计数为 15。问题是,当我针对NSNumber10 中的值测试值时if statement,代码似乎没有评估。

例如,在下面的数组中,代码应返回索引 0 中的值存在于索引 {0,9,10} 中,因为NSNumber1 存在于索引 0 和 10 中,而NSNumber10 存在于索引 9 中。

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

但是,它只评估NSNumber索引 0 中的值是否等于NSNumber1 而不是NSNumber10。输出不是预期的 {0, 9, 10} 而是只有 {0, 10}。

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 个元素上有两个索引,其余元素有一个索引。

如果您希望循环找到 @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 回答