2014-02-26 152 views
1

我有2個陣列:用其他陣列過濾陣列

array1包含object1類型的對象。 object1有一個屬性id

array2包含object2類型的對象。 object2有一個屬性object1Id

我知道,array2包含的對象總是在array1中,但array1可以有更多(或相等)對象。 顯示它:

Arrays

因此簡化:array1擁有的所有對象,array2有新的對象。如何獲得與舊對象的數組..?我試圖用謂詞來做,但是做一個循環並將每個object1Id插入到謂詞中感覺很奇怪。有沒有其他的選擇?如何正確地做到這一點?

回答

3

您可以使用謂詞,如果您使用KVC,則不需要循環。

獲取ID數組應該被排除在外:

NSArray *excludeIds = [array2 [email protected]"object1Id"]; 

創建謂詞:

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (id IN %@)", excludeIds]; 

然後過濾:

NSArray *oldObjects = [array1 filteredArrayUsingPredicate:filterPredicate]; 
1

它看起來像你正試圖執行一套操作。有用的是NSMutableSet類。使用setWithArray來創建集。然後使用類似的方法:

  • unionSet:
  • minusSet:
  • intersectSet:
  • setSet:

要獲得符合標準的子集。

來源:NSMutableSet Class Reference

希望它幫助。

+0

該方法通常更適合於包含相同類型對象的數組/集合 – Wain

0
NSArray*   oldIds = [array2 valueForKeyPath:@"object1Id"]; 
NSPredicate*  predicate = [NSPredicate predicateWithFormat:@"NOT (id IN %@)", oldIds]; 
NSArray*   objects = [array1 filteredArrayUsingPredicate:predicate];