如何使用键将对象添加到 NSMutableDictionary?

Posted

技术标签:

【中文标题】如何使用键将对象添加到 NSMutableDictionary?【英文标题】:How do I add object to NSMutableDictionary with key? 【发布时间】:2013-05-20 06:48:19 【问题描述】:

我有一个列表。我想将该 plist 中的元素添加到可变字典中。首先我检查plist中的用户名,我现在的名字是否相同。如果相同,那么我想将所有值添加到该字典 rom plist,并分配相同的键:

 for(int i=0;i<[displayList count];i++)
    
        if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user])
        
            [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"];
            [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"];
            [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"];
          [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"];
            

        
    

[displayList count] 此值为 7,因此每个值替换 6 次,并且只获得最终值我希望每个值都与用户名匹配我那个可变字典。

【问题讨论】:

那么这里有什么问题?希望“finalBooks”是你的“NSMutableDictionary”,是吗? 是的,但是 [displayList count] 这个值是 7,所以每个值替换 6 次,并且只得到最终值 @mango 这是因为您在每次迭代中针对相同的键设置(替换)字典值,这就是为什么您只能获得最终值。 至少将这些行中的第一行分成 3 行,这样您就可以看到发生了什么。 【参考方案1】:

我认为你应该创建字典数组。只需像这样将您的 finalBooks 字典添加到 NSMutableArray 即可

NSMutableArray *finalArray = [[NSMutableArray alloc]init];

(int i=0;i<[displayList count];i++)

    if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user])
    
        [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"];
        [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"];
        [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"];
        [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"];

        [finalArray addObject:finalBooks];
    

你会得到字典数组。祝你好运!!

【讨论】:

你不应该使用-objectForKey:/-setObject:forKey:吗?【参考方案2】:

如果键相同,NSMutableDictionary 中的 setValue 方法会替换值。所以你可以做的是使用数组或字典的 NSMutableDictionary。

NSMutableDictionary *userDictionary=[[NSMutableDictionary alloc]init];

(int i=0;i<[displayList count];i++)

    if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user])
    
        [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"];
        [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"];
        [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"];
        [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"];

        [userDictionary setObject:finalBooks forKey:user];
    

如果你想把所有的东西都放在一个字典里,我建议你使用一个唯一的键,比如NSString stringWithFormat:@"ID+%@",username],...[NSString stringWithFormat:@"username+%@",username]

但是看起来很乱:)

【讨论】:

以上是关于如何使用键将对象添加到 NSMutableDictionary?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用包含连字符的键将对象解构为变量? [复制]

通过 REST 调用使用外键将项目添加到集合中

通过 REST 调用使用外键将项目添加到集合中

实体框架代码优先 - 通过主键将子实体添加到父实体

使用相同的主键将值从一行添加到另一行 - Oracle SQL

如果不存在,Mongoose 将多个对象添加到数组