2012-01-03 5 views
0

У меня есть NSArray пользовательских объектов. Учтите, что пользовательские объекты имеют свойство PageNumber. Я хотел бы отфильтровать мой NSArray с условием типа «customObject.PageNumber».Отличительный объект с использованием NSPredicate

Я знаю, что могу пройти через массив и исключить объект с дублирующимися страницами. Но есть ли простой способ сделать это? Я пробовал,

[myarray valueForKeyPath:@"distinctUnionOfObjects.pageNumber"]; 

Это дает мне уникальные номера страниц (например, 7, 8, 9). Но я хочу сам пользовательский объект, а не только номера страниц. Может ли предикат помочь мне?

ответ

1

Я создал простую библиотеку, названную Linq к ObjectiveC, который представляет собой совокупность методов, которые делают этот вид проблемы намного легче решить. В вашем случае вам нужен Linq-to-ObjectiveC distinct метод:

NSArray* itemsWithUniquePageNumbers = [items distinct:^id(id item) { 
    return [item pageNumber]; 
}]; 

Это возвращает массив объектов, каждый из которых с уникальным номером.

+0

Это довольно круто. Благодаря! – Vignesh

0

Да, это возможно с помощью NSPredicate

customObject=[(NSArray*)[myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.PageNumber==%d",pageNumber]] lastObject]; 
//pageNumber is an integer 

Отфильтрованного массив является NSArray из пользовательских объектов, является результатом фильтрации с использованием предиката. Поскольку ваш номер страницы уникален, он возвращает только массив из одного объекта. Мы получаем это, передавая сообщение lastObject.

См: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1

+0

Извините. Мой вопрос приводит к неверному истолкованию. Я обновлю его. Я хочу массив, объекты которого имеют уникальный pagenumber. – Vignesh

+0

@ Vignesh Я столкнулся с такой же проблемой .. У вас есть какое-то решение? – Girish

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