Iphone 基于特定密钥的NSD字典重复数据消除NSArray

Iphone 基于特定密钥的NSD字典重复数据消除NSArray,iphone,objective-c,nsarray,nsdictionary,deduplication,Iphone,Objective C,Nsarray,Nsdictionary,Deduplication,我正在尝试根据字典中的特定键对NSR字典数组进行重复数据消除。我所拥有的是这样的: NSDictionary *person1 = [NSDictionary dictionaryWithObjectsAndKeys:@"John", @"firstName", @"Smith", "lastName", @"7898", @"employeeID"]; NSDictionary *person2 = [NSDictionary dictionaryWithObjectsAndKeys:@"Er

我正在尝试根据字典中的特定键对NSR字典数组进行重复数据消除。我所拥有的是这样的:

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

在这种情况下,我将创建一个临时NSMutableDictionary,并将每个personX dictionary添加为对象,将其“firstName”的值添加为键。这样,如果将另一个同名的personX添加到临时字典中,personX字典将被替换。然后使用-allValues从临时字典中获取数组。

在这种情况下,我将创建一个临时NSMutableDictionary,并将每个personX字典添加为对象,将其“firstName”的值添加为键。这样,如果将另一个同名的personX添加到临时字典中,personX字典将被替换。然后使用-allValues从临时字典中获取数组。

添加一个从NSDictionary继承的Person类并实现isEqual:忽略ID键,将字典强制转换到此类,然后从Person对象创建NSSet。

添加一个继承自NSDictionary的Person类并实现isEqual:忽略ID键,将字典强制转换到此类,然后从Person对象创建NSSet。

感谢您的快速响应!我想在这种情况下这会很好,唯一的问题是,我忘了具体说明,我正在处理成千上万的person对象。您的方法可以工作,但我不确定它的可伸缩性。我可能错了,但我知道NSDictionary在大多数情况下都是作为哈希映射的,摊销插入时间为O(1)。使用与预期的唯一条目数成比例的容量初始化字典,以防止异常重新灰化,并对其进行测试。内存也不应该是问题,因为您插入的实际上是一个引用。如果您有很多条目,并且不断检索和处理它们,那么核心数据可能会更好地满足您的需求。我感谢您的快速响应!我想在这种情况下这会很好,唯一的问题是,我忘了具体说明,我正在处理成千上万的person对象。您的方法可以工作,但我不确定它的可伸缩性。我可能错了,但我知道NSDictionary在大多数情况下都是作为哈希映射的,摊销插入时间为O(1)。使用与预期的唯一条目数成比例的容量初始化字典,以防止异常重新灰化,并对其进行测试。内存也不应该是问题,因为您插入的实际上是一个引用。如果您有很多条目,并且不断检索和操作它们,那么核心数据可能会更好地满足您的需要。