【发布时间】:2016-02-23 22:30:20
【问题描述】:
我正在寻找一个作为键对象的结构,如NSDictionary,但也有其计算重复对象并通过键定义这些重复的方法。我尝试NSCountedSet,但这个类没有key-object。
Foundation 上是否有任何可用的结构类型,或者我必须自己构建?
.....详细更新问题:
我查找重复联系人的结构,可以在他们的电子邮件中找到,因为这是唯一的,尽管他们的名字不同,但全名可能不同,例如:
NSMutableDictionary* listContacts = [[NSMutableDictionary alloc] init];
[listContact setObject:@”john.smith@email.com” forKey:@”john Smith”];
[listContact setObject:@”lara.croft@email.com” forKey:@”lara Croft”];
[listContact setObject:@”john.smith@email.com” forKey:@” Smith John”];
[listContact setObject:@”james.bond@email.com” forKey:@”James bond”];
NSDictionary 的 count 方法只计算它的元素个数。我知道@“john Smith”和@“Smith John”是一个,因为他的电子邮件是一样的。但是 NSDictionary 没有在对象上查找重复项的方法:@“john.smith@email.com”。我尝试将 NSCountedSet 设置为:
NSMutableArray* email = @[@”john.smith@email.com”, @”lara.croft@email.com”, @”john.smith@email.com”, @”james.bond@email.com”];
NSCountedSet* duplicateContacts = [[NSCountedSet alloc] initWithArray:email];
for (NSNumber *num in duplicateContacts)
{
if ([duplicateContacts countForObject:num]>1)
{
NSLog(@"duplicated %lu time of %@",[findDuplicate countForObject:num],num);
}
}
它只找到了重复的电子邮件,找不到它的相关名称。
如果我尝试 NSDictionary 的结构为:
NSMutableDictionary* listContacts = [[NSMutableDictionary alloc] init];
[listContact setObject: @”john Smith” forKey: @”john.smith@email.com”];
[listContact setObject: @”lara Croft” forKey: @”lara.croft@email.com”];
[listContact setObject: @” Smith John” forKey: @”john.smith@email.com”];
[listContact setObject: @”James bond” forKey: @”james.bond@email.com”];
NSDictionary 会静默删除添加的重复键,只剩下这个 NSDictionary 的结果:
Object: @”lara Croft” Key: @”lara.croft@email.com”;
Object: @” Smith John” Key: @”john.smith@email.com”;
Object: @”James bond” Key: @”james.bond@email.com”;
对象:@“john Smith” 密钥:@“john.smith@email.com”已被删除,因为密钥重复:@”john.smith@email.com”
【问题讨论】:
-
请举例说明你想在数据结构中存储什么以及你想执行什么操作!?
-
不确定你在问什么。
NSDictionary也有方法count。这不是你要找的吗? -
我为你们的cmets更新了我的问题,我不知道如何在我的评论中添加代码和长回复。
-
你想对重复的条目做什么?您不想像上一个示例(键:电子邮件,对象:名称)那样简单地删除它们吗?
标签: ios objective-c nsdictionary key-value