2010-10-21 49 views
0

我試圖根據字典中的特定鍵取消NSDictionaries的NSArray。我看起來像這樣:根據特定鍵非NSDictionaries的NSArray

NSDictionary *person1 = [NSDictionary dictionaryWithObjectsAndKeys:@"John", @"firstName", @"Smith", "lastName", @"7898", @"employeeID"]; 
NSDictionary *person2 = [NSDictionary dictionaryWithObjectsAndKeys:@"Eric", @"firstName", @"Johnson", "lastName", @"1718" @"employeeID"]; 
NSDictionary *person3 = [NSDictionary dictionaryWithObjectsAndKeys:@"John", @"firstName", @"Smith", "lastName", @"1153", @"employeeID"]; 

NSMutableArray *personArray = [NSArray arrayWithObjects:person1, person2, person3, nil]; 

// insert some code to de-dupe personArray based SOLELY on the firstName and lastName keys 

請注意,有兩名僱員具有相同名稱但ID不同。我想要做的只是返回一個只有person1和person2的新數組,因爲person3具有相同的數據 - 我只是不關心在這個特定問題中的「employeeID」值。

任何想法?謝謝!

-Matt

回答

5

添加Person類,繼承自NSDictionary並實現isEqual:忽略ID鍵,將字典轉換爲此類,然後從Person對象創建NSSet。

0

在這種情況下,很我會創建一個臨時的NSMutableDictionary並添加每個personX字典作爲對象和它的「名字」的價值爲重點。這樣,如果將另一個具有相同名稱的personX添加到臨時文件中,則將替換personX字典。然後從-allValues獲取臨時字典中的數組。

+0

我很感謝您的快速響應!我認爲在這種情況下,這是行得通的,唯一的問題是,我忘記指出,我正在處理數千個所述人物對象。你的方法可行,但我不確定它是如何可擴展的。 – mag725 2010-10-21 17:06:20

+0

我可能是錯的,但據我瞭解,NSDictionary大部分時間都是散列映射,分段插入時間爲O(1)。初始化字典的容量與唯一條目的預期數量成比例,以防止連續重新散列並對其進行測試。內存也不應該成爲問題,因爲你插入的內容實際上是一個參考。 如果您有很多條目,並且您不斷檢索並操作它們,Core Data可能會更好地滿足您的需求。 – sigsegv 2010-10-21 17:32:41

相關問題