将值与随机生成的另一个值相关联

时间:2015-12-18 05:57:26

标签: objective-c nsmutablearray

以下是我要做的事情:

我有一系列为用户随机生成的调查问题。

我想要的是将两个值相互关联,即随机生成的问题编号的整数值,以及一个整数值,表示该用户已回答此问题的次数。我希望以后能够保存和检索这些关联的值,这样我就可以增加用户回答此问题的次数。

那么,如何将两个不同的整数值相互关联,保存并稍后更新呢?

我从这段代码开始。

QuestionSelected = arc4random_uniform(4);

例如,一旦产生了这个结果:

QuestionSelected = 1

我需要建立一个新值,我可以将该值与该问题的值(1)相关联,递增它,然后在每次用户返回此问题时保存。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一个值与另一个值的关联是" map"。 NSDictionary是Cocoa中的标准映射集合,因此您可以使用它:

NSNumber * timesSeen = myMutableDictionary[@(selectedQuestion)];
if( !timesSeen ){
    timesSeen = @(0);
}
myMutableDictionary[@(selectedQuestion)] = @([timesSeen intValue] + 1);

由于数组本质上将其索引(数字)与值相关联,因此另一个选项是使用NSMutableArray

NSNumber * timesSeen = myMutableArray[selectedQuestion];
myMutableArray[selectedQuestion] = @([timesSeen intValue] + 1);

NSArray不能稀疏,因此在创建时必须用零填充它:

for( NSUInteger i = 0; i < numQuestions; i++ ){
    [myMutableArray addObject:@(0)];
}

正如您可能已经注意到的那样,处理需要在Cocoa集合中更改的数值有点痛苦,因为NSNumber必须每次都取消装箱并更换。所以第三个选项是C数组:

int * viewCounts;

viewCounts = calloc(numQuestions, sizeof(int));

viewCounts[selectedQuestion]++;

calloc()为你获取一大块内存并用零填充它。完成数组后,您需要通过调用free(viewCounts)来释放该内存。