2010-05-30 8 views
8

¿Cómo puedo tomar dos NSArrays volver, compararlas, a continuación, devolver el número de diferencias, preferentemente el número de diferentes objetos, por ejemplo:comparar dos NSArrays y el número de diferencias

Matriz 1: uno dos tres

matriz 2: dos cuatro uno

me gustaría que volver a "1"

+0

¿Por qué esa diferencia y no dos? –

+0

porque hay un elemento que es diferente. 1 tiene "tres" y 2 tiene "cuatro" –

Respuesta

23

Usted puede hacer esto mediante el uso de un intermedio NSMutableArray:

NSArray *array1 = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil]; 
NSArray *array2 = [NSArray arrayWithObjects:@"Two", @"Four", @"One", nil]; 
NSMutableArray *intermediate = [NSMutableArray arrayWithArray:array1]; 
[intermediate removeObjectsInArray:array2]; 
NSUInteger difference = [intermediate count]; 

Con esa manera, serán eliminados únicos elementos comunes.

+0

¡Funciona a la perfección! ¡Gracias un montón! –

+1

Si tiene un # de artículos relativamente grande en la matriz, este * podría * ser lento. Tal vez. Mídelo. Si es así, considerando usar 'NSSet' en su lugar. – bbum

2

Encontré que la respuesta anterior no tenía en cuenta las matrices de diferentes tamaños. Si lo hace que el anterior, usted debe comprobar para ver cuál es más pequeño y array.count

[largerArray removeObjectsInArray:shorterArray]; 

O

Los hice ambas NSSets y luego comparados.

[set1 isEqualToSet:set2]; 

¡De esta forma, el tamaño y el orden se manejan correctamente! (No necesitaba saber el número de diferencias)

Cuestiones relacionadas