我可以在 for 循环中将键值对添加到 NSarray 或字典吗?
Posted
技术标签:
【中文标题】我可以在 for 循环中将键值对添加到 NSarray 或字典吗?【英文标题】:can i add key value pair to NSarray or dictionary inside a for loop? 【发布时间】:2013-04-09 06:03:03 【问题描述】:我想从带有键值对的 for 循环中向 NSMutabledictionary 添加值?
目前正在使用此代码
for(int j=0;j<[array count];j++)
for(int l=0;l<array2 count] ;l++)
// retreive the category from plist ,then check whether its matching with "catid"
NSString *temp=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"cate"][l][@"categories"]];
if([catId isEqualToString:temp])
// "catid" is matching with temp then ,retreive the corresponding bid from plist
NSString *str=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"bid"]];
// add that value "bid" and key "catid" to a mutabledictionary
NSMutableDictionary *m=[[NSMutableDictionary alloc]init];
[m setValue:str forKey:catId];
结果是每次最终字典“m”的值被最新值替换,但我想要所有值一起?
iam 试图获得这样的输出
【问题讨论】:
对于每个l
,您只在索引j
处添加,因此它会覆盖键bid
的每个值
这不是我第一次对您的帖子进行类似的编辑 - 请不要在不合适的时候添加 xcode
标签,谢谢。
@AnoopVaidya:你的意思是我必须在第二个循环之外存储价值?
这是一个逻辑问题...我们不知道 l
或 j
您需要添加一个新值。
内外循环都给出相同的答案
【参考方案1】:
我想你可以将字典的初始化移到 for 之外,因为在 for 中它在每个循环中都被初始化,这就是它只有一个值的原因
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
for(int j=0; j < [array count]; j++)
NSMutableArray *containerArray = [[NSMutableArray alloc] init];
for(int l=0;l<[array2 count] ;l++)
// retreive the category from plist ,then check whether its matching with "catid"
NSString *temp=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"cate"][l][@"categories"]];
if([catId isEqualToString:temp])
// "catid" is matching with temp then ,retreive the corresponding bid from plist
NSString *str=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"bid"]];
// add that value "bid" and key "catid" to a mutabledictionary
[containerArray addObject:str];
[m setValue:containerArray forKey:catId];
更新
我已经更新了上面的代码,以适应图片中的输出
【讨论】:
【参考方案2】:试试这个代码。
NSMutableDictionary *m=[[NSMutableDictionary alloc]init];
for(int j=0;j<[array count];j++)
for(int l=0;l<array2 count] ;l++)
// retreive the category from plist ,then check whether its matching with "catid"
NSString *temp=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"cate"][l][@"categories"]];
if([catId isEqualToString:temp])
// "catid" is matching with temp then ,retreive the corresponding bid from plist
NSString *str=[NSString stringWithFormat:@"%@",allBookPlist[@"listbook"][j][@"bid"]];
// add that value "bid" and key "catid" to a mutabledictionary
[m setValue:str forKey:catId];
我认为您每次都在循环内分配一个新字典,这不是必需的。分配一次,然后继续向该可变字典添加值。
我想,每次你都有不同的catId
作为 KEY
【讨论】:
语法错误....被忽略了!但是这段代码中有什么新内容,以及它是如何解决的……你需要写那些:)【参考方案3】:在你的循环中,请试试这个逻辑
NSObject *collectionIndexString = indexPath;
NSMutableDictionary *tempDict = [myNSMutableArray[row] mutableCopy];
tempDict[@"collectionIndex"] = collectionIndexString;// Setting Key and Value
[myNSMutableArray replaceObjectAtIndex:row withObject:tempDict];
【讨论】:
以上是关于我可以在 for 循环中将键值对添加到 NSarray 或字典吗?的主要内容,如果未能解决你的问题,请参考以下文章