在不适用于iOS的字典数组中存储特定键的倍数值

时间:2016-07-06 09:43:34

标签: ios nsmutablearray key-value nsmutabledictionary

我希望有一个存储字典的数组,其中包含一些键值对,如下所示。

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;
}
)

任何人都可以告诉我我的代码中有什么问题。任何帮助表示赞赏。

3 个答案:

答案 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循环之外创建了字典。!!