как выбрать конкретные объекты из массива - PullRequest
0 голосов
/ 29 марта 2012

У меня есть массив, содержащий имя, фамилию и номер лица, которые я заполняю в табличном представлении. Теперь я хочу показать только те личные данные, чья фамилия равна «Ахмед». Это может быть простой вопрос, но я не могу это сделать. Любая помощь будет оценена. Вот мой код.

- (void)viewDidLoad {
    [super viewDidLoad];
    productArray=[[NSMutableArray alloc]init];

    PersonDetail *personObj = [[PersonDetail alloc] init];
    personObj.firstName = @"Adeem";
    personObj.lastName = @"Basraa";
    personObj.phoneNumber = @"123456789";

    [productArray addObject:personObj];
    [personObj release];

    PersonDetail *personObj = [[PersonDetail alloc] init];
    personObj.firstName = @"Ijaz";
    personObj.lastName = @"Ahmed";
    personObj.phoneNumber = @"987654321";

    [productArray addObject:personObj];
    [personObj release];

    PersonDetail *personObj = [[PersonDetail alloc] init];
    personObj.firstName = @"Waqas";
    personObj.lastName = @"Ahmad";
    personObj.phoneNumber = @"45656789";
    [productArray addObject:personObj];
    [personObj release];
}

Ответы [ 4 ]

4 голосов
/ 29 марта 2012

Вы можете использовать - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate в вашем массиве для получения нового отфильтрованного массива.

Для создания предиката используйте: (NSPredicate *)predicateWithFormat:(NSString *)format, ....

например:.

NSString* searchName = @"Ahmad";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", searchName];
NSArray* filteredPersons = [productArray filteredArrayUsingPredicate:predicate];
2 голосов
/ 29 марта 2012

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

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", nameObject];
[productArray filterUsingPredicate:predicate];

он удалит объект, не имеющий фамилии, как nameObj

NSMutableArray *list =   [productArray filteredArrayUsingPredicate:predicate];

этот оператор даст массиввсе объекты personDetail, имеющие lastName как nameObj

0 голосов
/ 25 мая 2013

Если кому-то это нужно, вот пример - надеюсь, это поможет.

Предположим, у вас есть массив allMovies , и вы ищете его для определенного фильма someMovie и хотите получить его индекс в массиве. allMovies - это массив словарей фильмов в качестве примера из службы JSON.

NSUInteger theIndex = [self.allMovies indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
  if ([[[obj objectForKey:@"movie"] objectForKey:@"id"] integerValue] == someMovie.id)
                *stop = YES;
                NSLog(@"IDX: %d", idx);
                return *stop;
}];
NSLog(@"FOUND INDEX FOR SEARCHED OBJECT: %d", theIndex);
0 голосов
/ 29 марта 2012

Вы можете использовать следующий метод из суперкласса NSArray:

- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

Этот метод принимает блок в качестве аргумента, который в основном похож на мини-функцию, которая будетбыть вызванным для каждого элемента массива.В вашем блочном коде вы можете привести id obj к экземпляру PersonDetail, а затем проверить, что имя равно «Ахмед».Как только вы найдете искомый PersonDetail, вы можете установить для выходного параметра stop значение true, разыменовав третий аргумент блока, как этот. *stop = YES.

Проверьте документациюдля этого метода NSArray .Возможно, вы также захотите проверить руководство по программированию блоков , если вы новичок в синтаксисе блоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...