2010-04-05 36 views
0

我有以下問題,我無法弄清楚如何解決它。我有一個包含Person對象的NSSSet(帶有2個鍵的NSDictionary:name,age)。時不時我得到一個NSArray Person對象,我想將它們添加到我的NSSet,但我想過濾出重複。我想我可以使用NSPredicates,但我正在閱讀文檔,我不明白我應該如何格式化我的NSPredicate,以根據我在NSSet中已有的內容過濾掉我的數組內容。帶有自定義對象的NSPredicates

所以我有一個NSSet有5個自定義對象,我得到一個NSArray有6個對象,但其中3個已經存在於NSSet中,我想過濾它們。我明白我應該如何處理像String,整數等基本對象,但我不知道如何擴展它來處理更復雜的自定義對象。

我希望我的問題已經夠清楚了。任何出發點,例子或建議非常感謝。

謝謝!

回答

0

如果你已經有一個可變集合,你並不需要做任何特別的事情。如果你在將來某個時候返回相同的Person實例,addObject:將簡單地忽略它。如果「平等」的含義不僅僅是兩個對象是否是同一個實例,那麼您必須親自處理,但是如果您的新對象爲isEqual返回YES,那麼addObject:在您之後已經忽略它把它放在集合中。

+0

是的,你是對的,這應該發生,但事實並非如此。我已經調查了一下這個問題。如果我嘗試附加大小爲5的NSArray {1,0,3,2,5,4},我會讓我的NSSet帶有5個整數{0,1,2,3,4,5},它會將它附加到NSSet,即使它是相同的,但順序不同。我測試了我的isEqual調用,它的工作原理正確。你有什麼想法,爲什麼我會得到這種行爲? –

+0

添加陣列中的每個項目。由於NSSet在對象上工作,因此只需將數組的引用添加到集合中即可。 –

+0

我發現了真正的問題。我沒有重寫散列方法,NSSets方法也使用對象的散列代碼來評估對象。所以現在我必須找出一種爲相同對象創建相同散列碼的方法。我稍後會發布解決方案。 –