将特定键的多个值存储在字典数组中不起作用 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 循环之外创建了字典。!!