2016-04-14 8 views
-2

2つの配列があります。一致するidcodeを取得しようとしています。しかし、一致する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

を2列iが取得データによって異なりますのでご注意下さい。 2つの配列は単なる例です。ありがとう。 –

+0

あなたはそれを行うために 'NSPredicate'を使うことができます:NSArray * resultArray =' [dataArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@ "IDCode IN%@"、IDCodeArray]] '? – Larme

答えて

1

@Larmeは、述語を使用することが理想的な解決策になると指摘しています。

はこれを試してみてください -

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