2012-01-03 4 views
0

사용자 정의 오브젝트의 NSArray가 있습니다. 사용자 지정 개체에 PageNumber 속성이 있다고 가정합니다. "customObject.PageNumber is distinct"와 같은 조건으로 NSArray를 필터링하고 싶습니다.NSPredicate를 사용하는 고유 오브젝트

나는 배열을 반복 할 수 있고 중복 된 pageNumber를 가진 객체를 제거 할 수 있음을 알고있다. 그러나 그것을 할 수있는 쉬운 방법이 있습니까? 나는 시도했다,

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

그것은 나에게 유일한 페이지 번호 (7, 8, 9와 같은)를 준다. 하지만 페이지 번호가 아닌 사용자 지정 개체 자체를 원합니다. 어떤 술어가 나를 도울 수 있습니까?

답변

1

. 이 객체의 배열, 고유의 페이지 번호와 함께 하나를 반환

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

: 귀하의 경우에 당신은 Linq-to-ObjectiveC distinct 방법이 필요합니다.

+0

정말 멋집니다. 감사! – Vignesh

0

예, 그 필터링 된 배열이 술어를 사용하여 필터링의 결과 사용자 정의 객체의 NSArray입니다 NSPredicate

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

의 도움으로 가능합니다. 페이지 번호는 고유하므로 한 객체의 배열 만 반환합니다. 메시지를 lastObject 메시지로 전달하면됩니다.

은 참조 : 내가 해결하기 위해 이런 종류의 문제는 훨씬 쉽게 방법의 모음입니다 오브젝티브 -c에 Linq에라는 간단한 라이브러리를 생성 한 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1

+0

죄송합니다. 내 질문은 오해를 불러옵니다. 나는 그것을 새롭게 할 것이다. 객체에 고유 한 페이지 번호가있는 배열을 원합니다. – Vignesh

+0

@Vignesh 나는 똑같은 문제에 직면하고있다. 어떤 해결책이 있니? – Girish

관련 문제