比较具有相同值但具有不同顺序的两个数组

cmi*_*mii 6 objective-c nsarray

我有2个nsarray,具有相同的值,但顺序不同.

NSArray*array1 = {0,1,2,3}
NSArray*array2 = {2,3,1,0}

我需要一种方法来确定两个数组是否具有不同顺序的相同值.

的种类

-(BOOL) isSameValues:(NSArray*)array1 and:(NSArray*)array2;
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 19

您可以NSCountedSet用于此目的:

- (BOOL)isSameValues:(NSArray*)array1 and:(NSArray*)array2
{
    NSCountedSet *set1 = [NSCountedSet setWithArray:array1];
    NSCountedSet *set2 = [NSCountedSet setWithArray:array2];
    return [set1 isEqualToSet:set2];
}
Run Code Online (Sandbox Code Playgroud)

NSCountedSet是一组不同的对象,每个对象都有一个相关的计数器.因此结果如下

NSArray *array1 = @[@0,@1,@2,@3];
NSArray *array2 = @[@2,@3,@1,@0];
Run Code Online (Sandbox Code Playgroud)

是的YES,但是

NSArray *array1 = @[@1,@1,@3,@3];
NSArray *array2 = @[@3,@3,@3,@1];
Run Code Online (Sandbox Code Playgroud)

结果是NO.


Dmi*_*nko 5

更新:如果数组有重复的元素,这将无效!

您可以NSSet使用这些数组创建两个s并进行比较.

NSArray * array1 = @[@0,@1,@2,@3];
NSArray * array2 = @[@2,@3,@1,@0];

NSSet *set1 = [NSSet setWithArray:array1];
NSSet *set2 = [NSSet setWithArray:array2];

NSLog(@"result %@", [set1 isEqualToSet:set2] ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)


Dru*_*erB 4

if ([[NSSet setWithArray:array1] isEqualToSet:[NSSet setWithArray:array2]]) {
    // the objects are the same
}
Run Code Online (Sandbox Code Playgroud)

  • 这会将 `[@1, @2, @2]` 和 `[@1, @1, @2]` 视为相等。 (5认同)