我可以在 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:你的意思是我必须在第二个循环之外存储价值? 这是一个逻辑问题...我们不知道 lj 您需要添加一个新值。 内外循环都给出相同的答案 【参考方案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 或字典吗?的主要内容,如果未能解决你的问题,请参考以下文章

在scala中将键值对添加到Map

将键值对添加到 Javascript 对象中

如何编写一个简单的 for 循环,使用键值对根据旧列中的值填充新列?

如何在 php 中将数组值作为键值对插入到数据库表中

在循环中将字典附加到熊猫数据框

如何在 JavaScript 中将 Object 转换为 Array [] 键值对