我有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.这个数组可能有几个匹配的结果,所以它必须得到所有的匹配,而不仅仅是在第一个匹配。感谢
答案 0 :(得分:1)
使用[NSArray indexesOfObjectsPassingTest:]
而不是[NSArray indexOfObjectPassingTest:]
,以便返回多个结果,而不只是一个。
答案 1 :(得分:1)
正如@Larme指出的那样,使用谓词将是一个理想的解决方案。
试试这个 -
NSArray* matches = [dataArray filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"IDCode IN %@", IDCodeArray]];