比较忽略顺序的两个数组

时间:2013-03-31 17:26:17

标签: objective-c cocoa-touch comparison nsarray

在类NSArray中,有一个方法isEqualToArray:,它比较两个数组并指示它们是否匹配。

我有两个阵列,它们的元素顺序不同。例如:

NSMutableArray* arr1 = [@[@"one", @"two", @"three"] mutableCopy];
NSMutableArray* arr2 = [@[@"three", @"one", @"two"] mutableCopy];

BOOL same = [arr1 isEqualToArray:arr2];
NSLog(@"%d", same);

在上面的示例中,即使arr1arr2具有相同的元素,isEqualToArray:也会返回NO。如何在不迭代for / while循环中的每个元素的情况下比较上面提到的两个数组?

2 个答案:

答案 0 :(得分:8)

使用NSSet然后进行比较。

NSSet *set1=[NSSet setWithArray:arr1];
NSSet *set2=[NSSet setWithArray:arr2];

BOOL same=[set1 isEqualToSet:set2];

编辑:

如果您在arr1和arr2中有重复项,请使用:

NSCountedSet *set1=[NSCountedSet setWithArray:arr1];
NSCountedSet *set2=[NSCountedSet setWithArray:arr2];

BOOL same=[set1 isEqualToSet:set2];

答案 1 :(得分:3)

我建议你对两个数组进行排序,并将结果与​​你尝试过的方法进行比较。