Ziel ist es, zwei Arrays als zu vergleichen und zu prüfen, ob sie die gleichen Objekte enthalten (so schnell wie möglich - es gibt viele Objekte in den Arrays). Die Arrays können nicht mit isEqual:
überprüft werden, da sie unterschiedlich sortiert sind.Schnellste Möglichkeit zu überprüfen, ob ein Array die gleichen Objekte eines anderen Arrays enthält
Ich habe bereits die hier gepostete Lösung ausprobiert (https://stackoverflow.com/a/1138417 - siehe letzten Codeausschnitt des Posts von Peter Hosey). Dies funktioniert jedoch nicht mit unterschiedlich sortierten Arrays.
Der Code, den ich jetzt bin mit ist die folgende:
+ (BOOL)arraysContainSameObjects:(NSArray *)array1 andOtherArray:(NSArray *)array2 {
// quit if array count is different
if ([array1 count] != [array2 count]) return NO;
BOOL bothArraysContainTheSameObjects = YES;
for (id objectInArray1 in array1) {
BOOL objectFoundInArray2 = NO;
for (id objectInArray2 in array2) {
if ([objectInArray1 isEqual:objectInArray2]) {
objectFoundInArray2 = YES;
break;
}
}
if (!objectFoundInArray2) {
bothArraysContainTheSameObjects = NO;
break;
}
}
return bothArraysContainTheSameObjects;
}
Dies funktioniert, aber das sind zwei ineinander geschachtelten schnell Aufzählungen. Gibt es eine Möglichkeit, einen schnelleren Vergleich durchzuführen?
Müssen Sie auch überprüfen, ob die Anzahl der übereinstimmenden Objekte gleich ist? Zum Beispiel, wenn Array 1 2 Instanzen von X hat, aber Array 2 nur 1 hat, dann scheitert es? – borrrden
Ja, dies sollte auch verifiziert werden. – FrankZp
In diesem Fall haben Sie keine andere Wahl, als beide zu sortieren und zu vergleichen. – borrrden