循环与数组停止

时间:2016-04-14 08:27:20

标签: ios arrays loops

我有2个数组我正在尝试获取匹配的idcodes。但是当我找到匹配的idcode时,我的数组会停止。有没有办法找到所有匹配的ID码?

    NSArray *IDCodeArray = @[@29, @30, @31, @45];
    NSArray *dataArray = @[
                   @{
                       @"IDCode" : @5,
                       @"dateEnd" : @"04/08/2016",
                       @"dateStart" : @"04/08/2016"
                   },
                   @{
                       @"IDCode" : @30,
                       @"dateEnd" : @"04/09/2016",
                       @"dateStart" : @"04/09/2016"

                   },
                   @{
                       @"IDCode" : @55,
                       @"dateEnd" : @"04/10/2016",
                       @"dateStart" : @"04/10/2016"
                   },
                   @{
                       @"IDCode" : @29,
                       @"dateEnd" : @"04/11/2016",
                       @"dateStart" : @"04/11/2016"
                    },
                   @{
                       @"IDCode" : @30,
                       @"dateEnd" : @"04/11/2016",
                       @"dateStart" : @"04/11/2016"
                    }                      
 ];

 NSMutableArray *resultArray = [[NSMutableArray alloc] init];


 // loop through each object using fast enumeration

 [IDCodeArray enumerateObjectsUsingBlock:^(NSNumber *idcode, NSUInteger idx, BOOL * _Nonnull stop) {

__block NSUInteger foundIndex = NSNotFound;

// loop through data array to find IDcode
foundIndex = [dataArray indexOfObjectPassingTest:^BOOL(NSDictionary  *dictObject, NSUInteger idx, BOOL * _Nonnull stop) {

    // stop the loop if found
    NSUInteger IDCodeObject = [dictObject valueForKey:@"IDCode"];
    return (IDCodeObject.integerValue == idcode.integerValue);
    }];

// add object to result array if found
if(foundIndex != NSNotFound){
    [resultArray addObject:[dataArray objectAtIndex:foundIndex]];
}
}];

NSLog(@"Result Array : %@", resultArray);

我的resultArray没有得到第二个idcode 30.这个数组可能有几个匹配的结果,所以它必须得到所有的匹配,而不仅仅是在第一个匹配。感谢

2 个答案:

答案 0 :(得分:1)

使用[NSArray indexesOfObjectsPassingTest:]而不是[NSArray indexOfObjectPassingTest:],以便返回多个结果,而不只是一个。

答案 1 :(得分:1)

正如@Larme指出的那样,使用谓词将是一个理想的解决方案。

试试这个 -

   NSArray* matches = [dataArray filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"IDCode IN %@", IDCodeArray]];