9

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

当我使用以下方法时,这些值将被替换为最近的值。

就我而言:

[dictionary setObject:forename forKey:[NSNumber numberWithint:code]];
[dictionary setObject:surname forKey:[NSNumber numberWithint:code]];
[dictionary setObject:reminderDate forKey:[NSNumber numberWithint:code]];

当我查看字典的内容时,我只得到reminderDatefor 键代码。在这里,所有值的代码都是相同的。如何避免名字和姓氏被替换为plannedReminder.

谢谢你!

4

4 回答 4

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.
    
于 2010-08-09T07:01:21.650 回答
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];

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

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

它可能不像dreamlax建议的那样具有多层字典那么干净,但是如果您正在处理一个字典,您想在其中存储一个键的数组并且该数组中的对象本身没有特定的键,这是一个解决方案!

于 2012-07-14T01:53:49.233 回答
2

我认为您不了解字典的工作原理。每个键只能有一个值。你会想要一个字典字典或数组字典。

在这里,您为每个人创建一个字典,然后将其存储在您的主字典中。

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
forename, @"forename", surname, @"surname", @reminderDate, "@reminderDate", nil];

[dictionary setObject:d forKey:[NSNumber numberWithint:code]];
于 2010-08-09T07:01:40.827 回答
1

现代语法更简洁。

A. 如果您在加载时构建静态结构:

NSDictionary* dic = @{code : @{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate}/*, ..more items..*/};

B.如果您实时添加项目(可能):

NSMutableDictionary* mDic = [[NSMutableDictionary alloc] init];
[mDic setObject:@{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate} forKey:code];
//..repeat

然后你作为二维字典访问......

mDic[code][@"forename"];
于 2015-05-22T17:23:29.383 回答