2010-05-30 5 views
8

Comment puis-je prendre deux NSArrays, les comparer, puis retourner le nombre de différences, de préférence le nombre d'objets différents, par exemple:Comparez deux NSArrays et retour nombre de différences

Tableau 1: un deux trois

Array 2: deux quatre un

Je voudrais que pour revenir "1"

+0

Pourquoi est-ce une différence et pas deux? –

+0

parce qu'il y a un élément différent. 1 a "trois" et 2 a "quatre" –

Répondre

23

Vous pouvez le faire en utilisant un NSMutableArray intermédiaire:

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]; 

Avec cette façon, seront supprimés des seuls éléments communs.

+0

Fonctionne parfaitement! Merci beaucoup! –

+1

Si vous avez un nombre d'éléments relativement important dans la matrice, cela peut être lent. Peut être. Mesure le. Si c'est le cas, pensez à utiliser 'NSSet' à la place. – bbum

2

J'ai trouvé que la réponse ci-dessus ne prenait pas en compte des tableaux de tailles différentes. Si vous le faites comme ci-dessus, vous devriez vérifier pour voir qui array.count est plus petit et

[largerArray removeObjectsInArray:shorterArray]; 

OU

Je les ai fait les deux NSSets puis comparés.

[set1 isEqualToSet:set2]; 

De cette façon, la taille et l'ordre sont traités correctement! (Je n'avais pas besoin de connaître le nombre de différences)

Questions connexes