6

在类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循环中的每个元素的情况下比较上面提到的两个数组?

4

2 回答 2

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];
于 2013-03-31T17:27:20.767 回答
3

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

于 2013-03-31T17:33:26.537 回答