如何使用键将对象添加到 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?的主要内容,如果未能解决你的问题,请参考以下文章