以下是我要做的事情:
我有一系列为用户随机生成的调查问题。
我想要的是将两个值相互关联,即随机生成的问题编号的整数值,以及一个整数值,表示该用户已回答此问题的次数。我希望以后能够保存和检索这些关联的值,这样我就可以增加用户回答此问题的次数。
那么,如何将两个不同的整数值相互关联,保存并稍后更新呢?
我从这段代码开始。
QuestionSelected = arc4random_uniform(4);
例如,一旦产生了这个结果:
QuestionSelected = 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)
来释放该内存。