2012-01-03 26 views
0

我有一個自定義對象的NSArray。考慮到自定義對象有一個PageNumber屬性。我想用像「customObject.PageNumber is distinct」這樣的條件過濾我的NSArray。使用NSPredicate的不同對象

我知道我可以遍歷數組,並消除重複pageNumbers的對象。但是有沒有簡單的方法來做到這一點?我試過,

[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 2013-03-08 17:25:17

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 2012-01-03 10:32:49

+0

@Vignesh我面臨同樣的問題..你有什麼解決方案嗎? – Girish 2013-02-13 14:08:43