iOS - Сравнение 2 массивов и объектов в массиве - проблема логики - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть NSArray, который содержит Person объектов.

Этот объект person содержит следующее:

> Name 
> Age 
> School 
> Address 
> Telephone_Number

Позже я буду устанавливать значения для этого объекта person,как person.Name=@"Jemmy"; (но я не буду устанавливать другие атрибуты, возраст, школу и т. д.).

У меня есть NSArray с именем personArray, и в нем содержится 1000 записей объектов человека.Теперь мне нужно отфильтровать все объекты, которые содержат Name Jemmy.Как я могу это сделать?

То, о чем я думал, это:

NSMutableArray *arrayThatContainAllPersonObjects = [NSMutableArray arrayWithArray:personArray];
[arrayThatContainAllPersonObjects removeObjectsInArray:arrayWeAddedTheName];

Но я получу массив, в котором нет результатов моего фильтра.Во всяком случае, это не может быть правильным подходом.Я полагаю, что мы могли бы использовать NSSets, UNIONS для решения этой проблемы.

примечание: некоторые могут сказать, что это дублирующий вопрос, но я много об этом искал.

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

Вы хотите использовать NSPredicate с NSArray's filteredArrayUsingPredicate.Как то так:

NSArray *filteredArray = [personArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = \"Jemmy\""]];
3 голосов
/ 07 февраля 2012

Если у Джемми все одинаковые, простой вариант:

  NSArray * cleanArray = [arrayWithAll removeObjectIdenticalTo:jemmyPerson];

Если это не так (их называют Джемми, но у них разные школы или что-то еще), вы уменьшите число до

   NSArray * cleanArray = [arrayWithAll filterUsingPredicate:jemmyPredicate];

или аналогичный с блоком / итерацией.Предикат может быть сконструирован следующим образом:

   NSPredicate jemmyPredicate = [NSPredicate predicateWithFormat:@"name == \"jemmy\"];

или

    NSPredicate jemmyPredicate = [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings){
           return [evaluatedObject.Name isEqual:@"Jemmy"];
    }];

. Для получения более подробной информации обратитесь к странице предиката.

1 голос
/ 07 февраля 2012

Попробуйте использовать функцию NSArray's filteredArrayUsingPredicate: и напишите пользовательский предикат для оценки объектов в вашем массиве.

...