2013-03-07 57 views
2

我有一個NSArray這樣的字符串對象中的名稱:@[@"john", @"smith", @"alex", @"louis"],並且我有另一個包含大量名稱的數組。我如何檢查第一個數組中的所有對象都在第二個中?檢查一個NSArray的內容是否都在另一個數組

+0

檢查此鏈接http://stackoverflow.com/questions/9178585/c omparing-2-arrays-and-objects-in-an-an-array-logic-issue – JPiOS 2013-03-07 11:02:58

回答

0

運行循環並使用isEqualToStiring來驗證mainArray中是否存在array1對象。

0

像你說的「約翰」可以使用的[NSArray containsObject:],你的目的將是你的陣列1的概念,「史密斯」,「亞歷克斯」,「路易」

0
int num_of_matches = 0; 
for(NSString *name in mainArray) 
{ 
     if(array1 containsObject:name){ 
     num_of_matches++; 
    } 
} 
if(num_of_matches == [array1 count]{ 
     // All objects present 
}else { 
     // Matched number is equal of number_of_matches 
} 
0

如果你只需要檢查array1中的所有對象是否在mainArray中,您應該只使用NSSet eg

BOOL isSubset = [[NSSet setWithArray:array1] isSubsetOfSet:[NSSet setWithArray:mainArray]] 

,如果你需要檢查哪些對象是在mainArray,你應該在NSMutableSet

NSMutableSet *array1Set = [NSMutableSet setWithArray:array1]; 
[array1Set intersectSet:[NSSet setWithArray:mainArray]]; 
//Now array1Set contains only objects which are present in mainArray too 
16

NSSet看看它你需要什麼。如果我們忽略了一會兒性能問題,那麼下面的片段將你在一行中需要什麼:

BOOL isSubset = [[NSSet setWithArray: array1] isSubsetOfSet: [NSSet setWithArray: mainArray]]; 
+0

我認爲這是迄今爲止最好的解決方案。我完全忘記了NSSet。 – 2013-03-07 11:31:34

+0

@PraveenS:我同意你:) – 2013-03-07 11:36:39

+0

確實是最好的解決方案:) +1 – User31 2015-05-21 13:22:43

0

使用的NSArray filteredArrayUsingPredicate:方法。它的真快,找出相似類型的對象在兩個數組

NSPredicate *intersectPredicate = [NSPredicate predicateWithFormat:@"SELF IN %@", otherArray]; 
NSArray *intersectArray = [firstArray filteredArrayUsingPredicate:intersectPredicate]; 

從上面的代碼中交叉陣列賦予您在其他數組相同的對象。

0

試試這個方法;

NSArray *[email protected][@"A",@"B",@"C",@"D"]; 
NSArray *[email protected][@"C",@"x"]; 

BOOL result=YES; 
for(id object in myArray){ 
    if (![mainArray containsObject:object]) { 
     result=NO; 
     break; 
    } 
} 
NSLog(@"%d",result); //1 means contains, 0 means not contains 
+1

山寨版還是什麼? :P – Groot 2013-03-07 11:14:16

+0

是的,我從你身上覆制過來:D – 2013-03-07 11:15:44

+1

Grr arrg!你有時候會讓我生氣,我覺得我甚至不能相信或不再和你說話! ^^ – Groot 2013-03-07 11:32:33

-1
NSArray *array1 = [NSArray arrayWithObjects:@"a", @"u", @"b", @"v", @"c", @"f", nil]; 
    NSMutableArray *mainArray = [NSMutableArray arrayWithObjects:@"a", @"u", @"I", @"G", @"O", @"W",@"Z",@"C",@"T", nil]; 
    int j=0; 
    for(int i=0; i < mainArray.count; i++) 
    { 
     if (j < array1.count) 
     { 
      for(j=0; j <= i; j++) 
      { 
       if([[mainArray objectAtIndex:i] isEqualToString:[array1 objectAtIndex:j]]) 
       { 
        NSLog(@"%@",[mainArray objectAtIndex:i]); 
       } 
      } 
     } 

    } 
2

使用此代碼..

NSArray *temp1 = [NSArray arrayWithObjects:@"john",@"smith",@"alex",@"loui,@"Jac", nil]; 
NSArray *temp2 = [NSArray arrayWithObjects:@"john",@"smith",@"alex",@"loui,@"Rob", nil]; 

NSMutableSet *telephoneSet = [[NSMutableSet alloc] initWithArray:temp1] ; 
NSMutableSet *telephoneSet2 = [[NSMutableSet alloc] initWithArray:temp2]; 


[telephoneSet intersectSet:telephoneSet2]; 

NSArray *outPut = [telephoneSet allObjects]; 
NSLog(@"%@",outPut); 

輸出數組包含..

「約翰」, 「史密斯」, 「亞歷克斯」,「路易

如根據你的要求。

+0

OP想檢查其他數組中存在的內容。不創建一個新的數組。這是如何回答的? – 2014-12-04 21:54:08

相關問題