随机访问NSArray,但不会丢失或加倍对象

时间:2013-03-05 00:25:21

标签: iphone ios nsarray arc4random

首先抱歉问题标题,很难用几句话来解答这个问题。

基本上我有一个NS数组,用一个单词中的字母填充。然后随机显示这些字母,用户必须找到正确的字母才能使该字出现。目前我使用的代码类似于:

int length = [arrayForCount count];
int randomindex = arc4random() % length;

这确实实现了我想要的,但是因为它是随机的每次调用它产生相同的int,这反过来将产生例如两个字母e而不是数组中的另一个字母。

我也试过

randIdx = random() % [arrayForRound count];

有人可以帮我找一个从数组中随机显示值的方法,但不会丢失或加倍一些字母吗?

如果需要更多信息,请告诉我,感谢先进的帮助。 Ť

1 个答案:

答案 0 :(得分:3)

正如我的评论中所提到的,将原始数组的对象复制到一个可变数组中并将其随机化:

NSUInteger count = [array count]; //array is the mutable copy of original array
for (NSUInteger i = 0; i < count; ++i) {
    NSInteger elements = count - i;
    NSInteger n = (arc4random() % elements) + i;
    [array exchangeObjectAtIndex:i withObjectAtIndex:n];
}

现在,您可以在array中逐个访问对象,它将是唯一的。你不会错过任何物品。