Цель состоит в том, чтобы сравнить два массива как и проверить, содержат ли они одни и те же объекты (как можно быстрее - в массивах много объектов). Массивы не могут быть проверены с помощью isEqual:
, поскольку они по-разному сортируются.
Я уже пробовал решение, размещенное здесь (qaru.site/info/290226/... - см. последний фрагмент кода сообщения Peter Hosey). Но это не работает с по-разному отсортированными массивами.
Код, который я использую сейчас, следующий:
+ (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;
}
Это работает, но это два вложенных быстрых перечисления. Есть ли способ сделать более быстрое сравнение?