NSMutableDictionary使用单个键在Objective-C编程中保存许多值

sus*_*use 9 objective-c nsmutabledictionary

请告诉我如何在NSMutableDictionary中为同一个键设置多个值?

当我使用以下方法时,值将被最近的值替换.

就我而言:

[dictionary setObject:forename forKey:[NSNumber numberWithint:code]];
[dictionary setObject:surname forKey:[NSNumber numberWithint:code]];
[dictionary setObject:reminderDate forKey:[NSNumber numberWithint:code]];
Run Code Online (Sandbox Code Playgroud)

当我查看字典的内容时,我只获得reminderDate了关键代码.这里,所有值的代码都相同.我如何避免被取代的姓氏和姓氏plannedReminder.

谢谢!

dre*_*lax 15

看起来您正在使用code键作为键,并且您想要基于表示多个值code.在这种情况下,您应该:

  1. 将所有与数据关联的数据抽象code到一个单独的类(可能称为Person)中,并将此类的实例用作字典中的值.

  2. 使用多层词典:

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    
    NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
    [firstOne setObject:forename forKey:@"forename"];
    [firstOne setObject:surname forKey:@"surname"];
    [firstOne setObject:reminderDate forKey:@"reminderDate"];
    
    [dictionary setObject:firstOne forKey:[NSNumber numberWithInt:code]];
    
    // repeat for each entry.
    
    Run Code Online (Sandbox Code Playgroud)

  • 不要只是投票,让我知道什么是错的,以便我可以解决它! (10认同)

小智 5

如果你真的坚持在字典中存储对象,并且如果你正在处理字符串,你总是可以用逗号分隔所有字符串,然后当你从密钥中检索对象时,你将拥有所有的准csv格式的对象!然后,您可以轻松地将该字符串解析为对象数组.

以下是您可以运行的一些示例代码:

NSString *forename = @"forename";
NSString *surname = @"surname";
NSString *reminderDate = @"10/11/2012";
NSString *code = @"code";

NSString *dummy = [[NSString alloc] init];
dummy = [dummy stringByAppendingString:forename];
dummy = [dummy stringByAppendingString:@","];
dummy = [dummy stringByAppendingString:surname];
dummy = [dummy stringByAppendingString:@","];
dummy = [dummy stringByAppendingString:reminderDate];
dummy = [dummy stringByAppendingString:@","];
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:dummy forKey:code];
Run Code Online (Sandbox Code Playgroud)

然后检索并解析字典中的对象:

NSString *fromDictionary = [dictionary objectForKey:code];
NSArray *objectArray = [fromDictionary componentsSeparatedByString:@","];
NSLog(@"object array: %@",objectArray);
Run Code Online (Sandbox Code Playgroud)

它可能不像像dreamlax建议的字典层一样干净,但如果你正在处理一个字典,你想要为一个键存储一个数组,而那个数组中的对象本身没有特定的键,这就是一个解决方案!