比较一个数组中的所有元素与其他数组

Nie*_*bæk 3 xcode loops objective-c ios

假设我有三个mutablearrays:arr1,arr2和arr3.我想将arr1中的所有元素与arr2中的每个元素进行比较,如果arr2中的元素包含arr1中的所有元素,我想将其添加到arr3.所以我认为它看起来像我下面的代码.在目标c中是否有一些智能功能我不知道,或者任何方式都可以做到这一点?

for(int i; i < arr2.count; i++)
{
  if([arr2 objectAtIndex:i] containAllElementsInArray:arr1]])
  {
    [arr3 addObject:[arr2 objectAtIndex:i]];
  }
}
Run Code Online (Sandbox Code Playgroud)

C4 *_*vis 8

查看数组是否包含另一个数组的所有元素的最佳方法是使用NSSets.NSSet将是不同对象的静态集合,这意味着当您从数组创建集合时,该集合将仅包含数组中每个disctint对象的1个条目.换句话说,一个数组可以有一个对象的多个副本,一个集合每个对象只有一个副本.

使用NSSet的重要部分是能够调用isSubsetOfSet方法:

isSubsetOfSet:返回一个布尔值,指示接收集中的每个对象是否也存在于另一个给定集中.

- (BOOL)isSubsetOfSet:(NSSet *)otherSet
Run Code Online (Sandbox Code Playgroud)

您需要从arr1创建一个集合并将其与arr2中的每个元素进行比较,以查看它是否是该元素的子集...

NSSet *arr1set = [NSSet setWithArray:arr1];
NSSet *arr2set = [NSSet setWithArray:[arr2 objectAtIndex:i]];

if ([arr1set isSubsetOfSet:arr2set]) {
    // then the element [arr2 objectAtIndex:i] contains all the elements of arr1
    [arr3 addObject:[arr2 objectAtIndex:i]];
}
Run Code Online (Sandbox Code Playgroud)