操纵两个数组

时间:2011-10-14 14:43:31

标签: objective-c nsmutablearray

我有两个数组:

NSMutableArray *web = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableArray *disk = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];

在比较两个数组后,我想创建一个名为remArray的数组,其中包含磁盘阵列中但不存在于Web数组中的对象(在本例中为字符串“1”)。

然后我想创建一个名为addArray的数组,其中包含Web数组中但不存在于磁盘数组中的对象(在本例中为字符串“4”)。

是否有一种简单的方法可以在没有太多开销的情况下完成此操作?

3 个答案:

答案 0 :(得分:5)

优于NSArray,您可以使用NSSet

使用NSMutableSet,您可以从另一组中删除对象:

- (void)minusSet:(NSSet *)otherSet

您的代码可以是:

NSMutableSet *web = [[NSMutableSet alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableSet *disk = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",nil];

NSMutableSet * remArray = [[NSMutableSet setWithSet:disk] minusSet:web];
NSMutableSet * addArray = [[NSMutableSet setWithSet:web] minusSet:disk];

您还可以阅读Collections Programming Topics指南。在使用数组之前,您必须确定是否需要有序集合。

答案 1 :(得分:2)

您可以使用removeObjectsInArray方法:

NSMutableArray * remArray = [NSMutableArray arrayWithArray:disk];
[remArray removeObjectsInArray:web];

切换磁盘和web以获取addArray。

答案 2 :(得分:1)

我不知道有什么简单的方法,但滚动你的“差异”方法并不太难。

以下内容应该有效:

- (NSArray *) differnceBetween: (NSArray *) array1 and: (NSArray *) array2 {
    NSMutableArray *difference = [[NSMutableArray alloc] init];
    for(id obj in array1) {
        if(![array2 contains:obj]) {
            [differnce addObject:obj];
        }
    }
    return difference;
}