2012-02-07 41 views
0

我有一個NSArray其中包含Person對象。iOS - 比較數組中的2個數組和對象 - 邏輯問題

此人物包含以下內容;

> Name 
> Age 
> School 
> Address 
> Telephone_Number 

稍後我將值設置這個人的對象,像[email protected]"Jemmy";(但我不會設置其他屬性,年齡,學校等)。

我有一個NSArray調用personArray,它包含1000人的對象記錄。現在我需要篩選出包含NameJemmy的所有對象。我怎樣才能做到這一點 ?

我在想什麼是;

NSMutableArray *arrayThatContainAllPersonObjects = [NSMutableArray arrayWithArray:personArray]; 
[arrayThatContainAllPersonObjects removeObjectsInArray:arrayWeAddedTheName]; 

但是,我會得到的是,沒有我的過濾結果的數組。無論如何,這可能不是正確的方法。我相信我們可以用NSSets,UNIONS來解決這個問題。

注:有人可能會說這是一個重複的問題,但我已經在這方面進行了太多的搜索。

回答

4

您想要使用NSArray的filteredArrayUsingPredicate的NSPredicate。事情是這樣的:

NSArray *filteredArray = [personArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = \"Jemmy\""]]; 
+0

但名稱,年齡,學校是Person對象的對象。那麼我可以比較屬於數組的一部分的對象的屬性嗎? – shajem 2012-02-07 15:13:47

+0

是的。有關詳細信息,請參閱「謂詞編程指南」(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789)。 'filteredArrayUsingPredicate'將'NSPredicate'應用到數組的每個成員,並且只給出一個只包含與謂詞匹配的元素的數組。如果person.name = @「Jemmy」,我給出的NSPredicate將匹配Person *人。 – yuji 2012-02-07 15:20:53

1

嘗試使用NSArray'sfilteredArrayUsingPredicate:函數並編寫自定義predicate來評估數組中的對象。

+0

我可以比較作爲數組(arrayThatContainAllPersonObjects)的一部分的對象('person')的屬性('name')嗎? – shajem 2012-02-07 15:14:56

+0

是的,你可以評估幾乎每個參數。閱讀我鏈接的文檔,你會學到如何。 – Alexander 2012-02-07 15:19:04

3

如果Jemmy的都是相同的簡單方法是

NSArray * cleanArray = [arrayWithAll removeObjectIdenticalTo:jemmyPerson]; 

如果不是這樣(他們被稱爲Jemmy - 但有不同的學校或其他)你是下來到

NSArray * cleanArray = [arrayWithAll filterUsingPredicate:jemmyPredicate]; 

或類似的塊/迭代。

NSPredicate jemmyPredicate = [NSPredicate predicateWithFormat:@"name == \"jemmy\"]; 

NSPredicate jemmyPredicate = [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings){ 
      return [evaluatedObject.Name isEqual:@"Jemmy"]; 
    }]; 

諮詢謂詞頁瞭解詳情:謂詞可以用類似構造。

+0

在塊中添加它的目的是什麼? – shajem 2012-02-07 16:06:46

+0

,它可以讓你更容易地編寫更復雜的邏輯 - 但如果它很簡單 - 我會堅持使用謂詞。 – 2012-02-07 21:31:28