将特定键的多个值存储在字典数组中不起作用 iOS
storing multiples values for particular key in an array of dictionaries not working iOS
我想要一个数组来存储带有一些键值对的字典,如下所示。
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 是包含所有 'que' 元素的数组,addValuesArrray 包含所有 'and' 元素。但是当我将这些数组设置为字典对象并将该字典添加到新数组(_addArrayNewQA)时,它只显示最后一个元素,就像这样-
add = (
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
}
)
谁能告诉我我的代码有什么问题。任何帮助表示赞赏。
那是因为您在 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];
您需要在每次迭代时创建一个新的内部字典。您正在做的是一遍又一遍地添加相同的字典并更改其内容,因此您最终得到包含最后一个条目的字典数组。
for (int i=0; i<=[addKeyArray count]; i++) {
NSDictionary *innerDict = @{
@"que" : addKeyArray[i],
@"ans" : addValuesArray[i]
};
[_addArrayNewQA addObject:innerDict];
}
并删除 _addDictNewQA
实例变量。
在 for 循环中创建字典。您每次都需要创建新词典。因此,在 for 循环中创建可变字典并将该字典添加到可变数组(您的结果数组)中,该数组不能在 for 循环中创建(alloc 和 init)。
您的代码似乎是在 for 循环之外创建了字典。!!
我想要一个数组来存储带有一些键值对的字典,如下所示。
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 是包含所有 'que' 元素的数组,addValuesArrray 包含所有 'and' 元素。但是当我将这些数组设置为字典对象并将该字典添加到新数组(_addArrayNewQA)时,它只显示最后一个元素,就像这样-
add = (
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
},
{
ans = GM;
que = dosa;
}
)
谁能告诉我我的代码有什么问题。任何帮助表示赞赏。
那是因为您在 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];
您需要在每次迭代时创建一个新的内部字典。您正在做的是一遍又一遍地添加相同的字典并更改其内容,因此您最终得到包含最后一个条目的字典数组。
for (int i=0; i<=[addKeyArray count]; i++) {
NSDictionary *innerDict = @{
@"que" : addKeyArray[i],
@"ans" : addValuesArray[i]
};
[_addArrayNewQA addObject:innerDict];
}
并删除 _addDictNewQA
实例变量。
在 for 循环中创建字典。您每次都需要创建新词典。因此,在 for 循环中创建可变字典并将该字典添加到可变数组(您的结果数组)中,该数组不能在 for 循环中创建(alloc 和 init)。
您的代码似乎是在 for 循环之外创建了字典。!!