首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作两个数组

操作两个数组
EN

Stack Overflow用户
提问于 2011-10-14 22:43:31
回答 3查看 351关注 0票数 2

我有两个数组:

代码语言:javascript
复制
NSMutableArray *web = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableArray *disk = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];

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

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

有没有一种简单的方法可以在不增加太多开销的情况下做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-14 22:58:47

您可以使用NSSet,它比NSArray更好

使用NSMutableSet,您可以从其他集合中删除对象:

代码语言:javascript
复制
- (void)minusSet:(NSSet *)otherSet

你的代码可以是:

代码语言:javascript
复制
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指南。在使用数组之前,您必须确定是否需要有序集合。

票数 5
EN

Stack Overflow用户

发布于 2011-10-14 23:11:00

您可以使用removeObjectsInArray方法:

代码语言:javascript
复制
NSMutableArray * remArray = [NSMutableArray arrayWithArray:disk];
[remArray removeObjectsInArray:web];

执行相同的操作,切换磁盘和web以获取addArray。

票数 2
EN

Stack Overflow用户

发布于 2011-10-14 22:58:46

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

下面的内容应该是可行的:

代码语言:javascript
复制
- (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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7769330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档