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

标签 iphone ios nsarray arc4random

首先,对问题标题感到抱歉,很难用几句话就可以解决这个问题。

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

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

但这确实达到了我想要的效果,因为每次调用它都是随机的,它会产生相同的int,这将依次产生例如两个字母e,但不会产生数组中的另一个字母。

我也尝试过
randIdx = random() % [arrayForRound count];

有人可以帮我找到一种从数组中随机显示值,但又不丢失某些字母或使其倍增的方法吗?

让我知道是否需要更多信息,谢谢高级提供的帮助。 Ť

最佳答案

如我的评论中所述,将原始数组的对象复制到一个可变数组,并按以下顺序对其进行随机播放:

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中的对象,它将是唯一的。您也不会错过任何物品。

关于iphone - 随机访问NSArray,但不会丢失或加倍对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15213668/

相关文章:

ios - 如何更新而不是重新加载 UITableView?

ios - 异步调用完成后如何启动另一个任务

iphone - 将 NSArray 转换为 NSDictionary

iphone - 无法以编程方式隐藏使用 IB 创建的 UIButton

iphone - Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

iphone - iPad制作电子相册的这种控件哪里找

swift - 如何在 Swift 中声明特定类型的 NSArray?

ios - 如何检查某个对象是否存在于 NSMutableArray 的某个索引处?

iPhone屏幕旋转: Can I enforce 90 degree rotations?

iphone - 在应用程序中实现 iPhone 应用程序