versiones tutorial plataforma objective compiler iphone objective-c cocoa

iphone - tutorial - objective-c++



Comparando dos matrices (3)

Tengo dos NSArrays, lo que quiero hacer es comparar dos matrices que contienen cadenas, encontrar las similitudes y crear la primera matriz de nuevo, pero no tienen similitudes.

Solo por un ejemplo algo así como.

Dos matrices:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil]; NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];

Salir:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil]; NSArray *arrayOneCopy = [NSArray arrayWithObjects:@"TD1", @"TD3", nil]; NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];


NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:arrayOne]; [arrayOneCopy removeObjectsInArray:arrayTwo];


- (NSInteger)countOfDifferentObjects:(NSArray *)anotherArray { NSSet * s = [NSSet setWithArray:self]; NSMutableSet * s1 = [NSMutableSet setWithSet:s]; NSSet * s2 = [NSSet setWithArray:anotherArray]; [s1 unionSet:s2]; [s1 minusSet:s]; return [s1 count]; }

Esto devuelve la cantidad de objetos diferentes entre dos matrices (la comparación es con isEqual)

array1 = @"A", @"B", @"C" array2 = @"B", @"D", @"Z" returns 2 (D and Z are different)


Use NSMutableSet :

NSMutableSet *setOne = [NSMutableSet setWithArray: arrayOne]; NSMutableSet *setTwo = [NSMutableSet setWithArray: arrayTwo]; [setOne minusSet: setTwo]; NSArray *arrayOneResult = [setOne allObjects];

(en sentido estricto, setTwo no tiene que ser mutable, también puede ser un NSSet (que se comporta mejor))

O use NSArray como respondió la otra persona, eso también funciona.

Cuál funciona depende completamente del tamaño de su conjunto de datos. Para pequeños conjuntos de datos, la solución de matriz funciona bien. Para conjuntos más grandes, NSSet será mucho más eficiente ya que las pruebas de membresía son una comprobación de hash y no una búsqueda lineal.

Mida y use el que mejor funciona.