gpt4 book ai didi

ios - 检查了重复对象的 NSDictionary

转载 作者:行者123 更新时间:2023-11-29 01:27:36 25 4
gpt4 key购买 nike

我正在寻找一个作为键对象的结构,如 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 的计数方法只统计它的元素个数。我知道@“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” 已被删除

最佳答案

我只想创建一个数组字典。键是电子邮件地址,值是联系人/姓名数组。每个键的计数就是其值的计数(数组中元素的数量)。

您可以使用以下算法构建它:

NSArray *contacts = ...;
NSMutableDictionary *keyedEmails = [NSMutableDictionary dictionary];

for (Contact *contact in contacts) {
NSMutableArray *contactsForEmail = keyedEmails[contact.email];
if (contactsForEmail = nil) {
contactsForEmail = [NSMutableArray array];
keyedEmails[contact.email] = contactsForEmail;
}

[contactsForEmail addObject:contact];
}

您甚至可以使用简单的语法获取任何电子邮件的计数:

NSUInteger countForEmail = keyedEmails[email].count;

关于ios - 检查了重复对象的 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33843571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com