检查一个NSArray的内容是否都在另一个数组中

时间:2013-03-07 10:56:12

标签: objective-c cocoa cocoa-touch collections nsarray

我有一个NSArray在字符串对象中有这样的名字:@[@"john", @"smith", @"alex", @"louis"],我有另一个包含很多名字的数组。如何检查第一个数组中的所有对象是否在第二个?

9 个答案:

答案 0 :(得分:20)

NSSet具有您正在寻找的功能。

如果我们暂时忽略性能问题,那么以下代码段将在一行代码中执行您所需的操作:

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

答案 1 :(得分: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);

输出数组包含..

“john” 的, “史密斯”, “亚历克斯”,“路易

根据您的要求。

答案 2 :(得分:0)

运行循环并使用isEqualToStiring来验证mainArray中是否存在array1对象。

答案 3 :(得分:0)

您可以使用[NSArray containsObject:]的概念,您的对象将来自您的数组1,就像您说“john”,“smith”,“alex”,“loui”

答案 4 :(得分: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
}

答案 5 :(得分:0)

如果您只需要检查array1中的所有对象是否都在mainArray中,您应该只使用NSSet e.g。

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

答案 6 :(得分:0)

使用NSArray filteredArrayUsingPredicate:方法。在两个数组中找到相似类型的对象真的很快

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

从上面代码中,intersect数组为你提供了与其他数组相同的对象。

答案 7 :(得分:0)

试试这种方式;

NSArray *mainArray=@[@"A",@"B",@"C",@"D"];
NSArray *myArray=@[@"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

答案 8 :(得分:-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]);
                }
            }
        }

    }