从另一个数组中减去一个NSArray中的对象

Jac*_*nkr 32 cocoa cocoa-touch objective-c subtraction nsarray

我有两个NSArrays:

NSArray *wants = [NSArray arrayWithObjects:
                  @"apples", 
                  @"oranges", 
                  @"pineapple", 
                  @"mango", 
                  @"strawberries", 
                  nil];
NSArray *needs = [NSArray arrayWithObjects:
                  @"apples", 
                  @"pineapple", 
                  @"strawberries", 
                  nil];
Run Code Online (Sandbox Code Playgroud)

我想要XOR他们.像wants - needs我这样的东西就是这样

[NSArray arrayWithObjects:
@"oranges", 
@"mango", 
nil];
Run Code Online (Sandbox Code Playgroud)

我通常会经历一些沉重的循环,但我确信有一种更实用的方法.我该怎么做呢?

Kir*_*odd 61

像这样的东西?

NSMutableArray *array = [NSMutableArray arrayWithArray:wants];
[array removeObjectsInArray:needs];
Run Code Online (Sandbox Code Playgroud)

  • @TompaLompa不,它没有崩溃.来自NSMutableArray文档:`如果接收数组不包含otherArray中的对象,则该方法无效(尽管它确实会产生搜索内容的开销). (4认同)

Ken*_*ses 8

Kirby的答案很好,但是:如果你不关心数组中元素的顺序,你应该使用集合.如果订单很重要,您可以考虑NSOrderedSet.-minusSet:对于后者,您可以使用或-minusOrderedSet:.


Gyf*_*fis 8

如何使用谓词?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)", needs];
NSArray *wants_needs = [wants filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)