2013-11-28 2 views
0

У меня есть два NSArray s, array1 и array2.Удалить определенные значения из NSArray

array1 Если имеет значения, 78, 9, 10 и array2 имеет значения 7, 9, 10; как бы удалить только переменные, которых нет в пределах array2.

array1 Так бы от 7, 8, 9, 10 - к 7, 9, 10.

+1

Мы предполагаем, что объекты 'NSNumber' в обоих массивах? – Alladinian

+0

И массивы mutable ('removeObjectsInArray:')? – Wain

+1

Вам действительно нужны массивы? Я имею в виду, что вы используете для индекса вообще? Если нет, то посмотрите на NSSet. NSSet - это такие коллекции, как NSArray, которые вы можете выполнять итерации и т. Д., Но они не имеют индексов и не сортируются (но при необходимости могут быть преобразованы в отсортированные массивы). Но предоставить вам все эти методы, такие как объединения и пересечения, то, что вам в настоящее время нужно. –

ответ

1

Используйте метод NSMutableSet intersectSet:, чтобы найти пересечение обоих массивов.

E.g. что-то вроде:

NSMutableSet *intersection = [NSMutableSet setWithArray:firstArray]; 
[intersection intersectSet:[NSSet setWithArray:secondArray]]; 

NSArray *intersectionArray = [intersection allObjects]; 
+0

Этот код, похоже, не работает для меня. NSArray * allYearArray = [[NSArray alloc] initWithObjects: @ "7", @ "9", @ "11" @ "12", nil]; NSArray * userYearArray = [[NSArray alloc] initWithObjects: @ "7", @ "9", @ "12", nil]; NSMutableSet * intersection = [NSMutableSet setWithArray: allYearArray]; [пересечение intersectSet: [NSSet setWithArray: userYearArray]]; NSArray * intersectionArray = [intersection allObjects]; NSLog (@ "intersectionArray:% @", intersectionArray); Это возвращает: 7, 9 – Will

+1

В этом коде вы забыли запятую в '@" 11 "@" 12 "', если вы добавите запятую, она должна работать. – Wain

+0

Geez, это смущает., Теперь он работает. Большое вам спасибо за помощь! – Will

Смежные вопросы