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

Associating a value with another value generated randomly

这是我想要做的事情:

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

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

那么,如何将两个不同的整数值相互关联、保存并在以后更新它们?

我从这段代码开始。

QuestionSelected = arc4random_uniform(4);

例如,一旦生成此结果:

已选择问题 = 1

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

感谢您的帮助!

一个值与另一个值的关联是 "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) 来释放该内存。