比较两个阵列

Jos*_*hua 28 iphone cocoa objective-c

我有两个NSArrays,我想要做的是比较两个包含字符串的数组,找到相似之处并再次创建第一个数组,但它们没有相似之处.

只是为了一个例子.

两个阵列:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];
Run Code Online (Sandbox Code Playgroud)

结果:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];

NSArray *arrayOneCopy = [NSArray arrayWithObjects:@"TD1", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];
Run Code Online (Sandbox Code Playgroud)

new*_*cct 60

NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:arrayOne];
[arrayOneCopy removeObjectsInArray:arrayTwo];
Run Code Online (Sandbox Code Playgroud)


bbu*_*bum 28

使用NSMutableSet:

NSMutableSet *setOne = [NSMutableSet setWithArray: arrayOne];
NSMutableSet *setTwo = [NSMutableSet setWithArray: arrayTwo];

[setOne minusSet: setTwo];

NSArray *arrayOneResult = [setOne allObjects];
Run Code Online (Sandbox Code Playgroud)

(严格来说,setTwo不一定是可变的,也可以是NSSet(表现更好))

或者使用NSArray作为对方的回答 - 这也有效.

哪一个完全取决于您的数据集大小.对于小型数据集,阵列解决方案工作正常.对于较大的集合,NSSet将更加高效,因为成员资格测试是哈希检查而不是线性搜索.

测量并使用效果最好的那个.