比较两个阵列

时间:2011-09-10 14:05:22

标签: objective-c comparison nsmutablearray nsarray compare

如何比较两个NSArray,以便删除两个数组中没有的所有内容。

我试过这样:

    NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil]; 
    NSArray *array2 = [NSArray arrayWithObjects:@"1",@"2",@"5",@"6", nil];

    NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:array1];
    NSMutableArray *myMutableArrayTwo = [myMutableArray copy];
    [myMutableArray removeObjectsInArray:array2];

    [array1 release];
    [array2 release];

    NSArray *array3 = [myMutableArray copy];
    [myMutableArrayTwo removeObjectsInArray:array3]; // Error here: "SIGABRT"

    NSLog(@"array3:%@",myMutableArrayTwo);

但由于错误,它无效。它是:“ - [__ NSArrayI removeObjectsInArray:]:无法识别的选择器发送到实例0x4e51550”

我做错了什么?或者有更简单的方法来解决我的问题? 谢谢你的帮助

3 个答案:

答案 0 :(得分:5)

这是因为您创建了NSMutableArray的副本(不可变),因此您正在丢失可变功能。

请改用mutableCopy方法。

顺便说一下,你有很多内存问题。您的array1array2变量是自动释放的对象。释放它们会引发问题。

您只需要发布使用alloccopymutableCopy创建的数组。

答案 1 :(得分:0)

根据here,您应该使用addObjectsFromArray代替arrayWithArray,因为您正在填充NSMutableArray

NSMutableArray *myMutableArray = [NSMutableArray addObjectsFromArray:array1];

答案 2 :(得分:0)

试试这个

NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil]; 

NSArray *array2 = [NSArray arrayWithObjects:@"1",@"2",@"5",@"6", nil];

NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:array1];

NSMutableArray *myMutableArrayTwo = [myMutableArray mutableCopy];//mutable copy

[myMutableArray removeObjectsInArray:array2];

//    u didn't use alloc,init,new,copy to create array1,array2.
//    so u dont need to release it.because it is autoreleased object.

//    [array1 release];
//    [array2 release];

NSMutableArray *array3 = [myMutableArray mutableCopy];//mutable copy

[myMutableArrayTwo removeObjectsInArray:array3]; 

NSLog(@"array3:%@",myMutableArrayTwo);

<强>输出: ARRAY3 :(         1,         2         )

注意:创建后,你无法从NSArray中删除任何对象。不可变。

that's y we have used mutable NSMutableArray