我希望有一个存储字典的数组,其中包含一些键值对,如下所示。
add = (
{
ans = abc;
que = Fdgdf;
},
{
ans = hi;
que = hello;
},
{
ans = GM;
que = dosa;
}
)
这是我试过的。
for (int i=0; i<=[addKeyArray count]; i++) {
[_addDictNewQA setObject:[addKeyarray objectAtIndex:i] forKey:@"que"];
[_addDictNewQA setObject:[addValuesArray objectAtIndex:i] forKey:@"ans"];
[_addArrayNewQA addObject:_addDictNewQA];
}
这里addKeyArray是一个包含所有&#39; que&#39; elements和addValuesArrray包含所有&#39;和&#39;元素。但是当我将这些数组设置为字典对象并将该字典添加到新数组(_addArrayNewQA)时,它只显示最后一个这样的元素 -
add = (
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
}
)
任何人都可以告诉我我的代码中有什么问题。任何帮助表示赞赏。
答案 0 :(得分:0)
这是因为你在NSMutableDictionary
的同一个对象中设置了值,你也不需要将NSMutableDictionary作为全局因为你只在for循环中使用它。
您需要创建新词典
for (int i=0; i<=[addKeyArray count]; i++) {
NSMutableDictionary *_addDictNewQA = [NSMutableDictionary new];
[_addDictNewQA setObject:[addKeyarray objectAtIndex:i] forKey:@"que"];
[_addDictNewQA setObject:[addValuesArray objectAtIndex:i] forKey:@"ans"];
}
[_addArrayNewQA addObject:_addDictNewQA];
答案 1 :(得分:0)
您需要在每次迭代时创建一个新的内部字典。你正在做的是反复添加相同的字典并更改其内容,以便最终得到包含最后一个条目的字典数组。
for (int i=0; i<=[addKeyArray count]; i++) {
NSDictionary *innerDict = @{
@"que" : addKeyArray[i],
@"ans" : addValuesArray[i]
};
[_addArrayNewQA addObject:innerDict];
}
删除_addDictNewQA
实例变量。
答案 2 :(得分:0)
在for循环中创建字典。你需要每次都创建新的字典。因此,在for循环中创建可变字典并将该字典添加到可变数组(您的结果数组)中,该数组不能在for循环中创建(alloc和init)。
您的代码似乎已在for循环之外创建了字典。!!