2013-07-12 37 views
6

我想比较2 NSMutableArray并获得不同的对象到第三Array。我怎样才能做到这一点 ?比较2 nsmutablearray并获得不同的对象到第三个数组在ios

Array1可以循环对象。

Array1 = "a", "b","c","d","a","b","c"; 
Array2 = "a", "b", "c"; 

然后导致

Array3 = "d"; 

在此先感谢

+0

应该ARRAY3只是'[ “d”]',还是应'[ “B”, “d”] ',你的问题不清楚'diff object'是什么意思? – Wain

+0

对象是否是字符串?此外,你是否在寻找相等(值相同)或标识(array1中的哪些对象占用与array2中的对象相同的内存)? – Maarten

+0

@Wain:我编辑了我的问题 – NGOT

回答

20

使用套组操作:

NSSet *set1 = [NSSet setWithArray:array1]; 
NSMutableSet *set2 = [NSMutableSet setWithArray:array2]; 
[set2 minusSet:set1]; 
+1

+1 @NGOT使用NSSet是有效的。 –

+0

我试着上面的代码,但在控制台set2总是= 0 – NGOT

+0

@NGOT,你是否使用真正的字符串文字作为在问题或自定义类的一些对象? – vikingosegundo

5
NSMutableArray *gotDiffArry= [[NSMutableArray alloc] init]; 
for(int i = 0 ; i < FirstArray.count; i++) { 
    if(i < seconArray.count){ 
     if(![seconArray[i] isEqual:firstArray[i]]){ 
      [gotDiffArry addObject:[NSNumber numberWithInt:i]]; 
     } 
    } else { 
     [gotDiffArry addObject:[NSNumber numberWithInt:i]]; 
    } 
} 

编辑:

for (int i = 0 ; i < firstArray.count ; i ++) 
{ 

NSString *search = [firstArray objectAtIndex:i]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF CONTAINS %@", search]; 
NSMutableArray *temAraay = [secondArray filteredArrayUsingPredicate: predicate]; 
if(temArray.count >=0) 
{ 
    NSLog("%@", [temArray objectAtIndex:0]); 
} 
} 
+0

什么类型的differentIndex? – NGOT

+0

如果数组很大,这是太迭代和耗时的了,而不是一个有效的方法 –

+0

谢谢,但我只想得到diff对象而不是所有的对象 – NGOT

8

你也可以试试这个。

NSMutableArray *array1 = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"1", nil]; 
NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:@"2",@"1", nil];  

NSMutableArray *largeArray; 
NSMutableArray *shortArray; 
if([array1 count] > [array2 count]){ 
    largeArray = array1; 
    shortArray = array2; 
} else { 
    largeArray = array2; 
    shortArray = array1; 
} 
[largeArray removeObjectsInArray:shortArray]; 

for (NSString *va in largeArray) { 
    NSLog(@"%@",va); 
} 
+0

你可以确定哪一个很大,哪一个很短? – 2013-07-12 09:38:37

+0

@RanjuPatel像你有你想检查重复数组(重复也在数组中)的数组。 – Buntylm

4

我已经使用以下,得到了期望的结果:

for(int i =0; i<[arraytwo count]; i++) 
{ 
    if (![arrayone containsObject:[arraytwo objectAtIndex:i]]) 
     [arraythree addObject: [arraytwo obectAtIndex:i]]; 
}  
NSLog(@"%@",arraythree); 
+0

可能比设置的方法更有效(对于较小的阵列,至少)。 –

+0

我也用它来做更大的阵列。它可能需要一些时间来更大阵列,但我在后台做这件事情,所以工作正常。 – 2013-07-12 13:05:40

+0

是的,这只是我对各种计划没有经过“大O”估计。可能这套方法对于大型套装来说效率更高,但您可能必须处于成千上万的元素中才能发挥重要作用。 –

相关问题