algorithm - 如何在不产生任何重复项的情况下从数组中提取随机元素

标签 algorithm arrays

我在我的 iPhone 项目中使用 rand() 函数来生成随机数组索引。我生成几个随机索引,然后从这些索引中获取对象。但是我不想多次获取一个对象,所以有没有一种方法可以在数组计数范围内生成一个随机数(我已经在做),不包括以前选择的数字。

即像这样:

int one = rand() % arrayCount
int two = rand() % arrayCount != one

谢谢

最佳答案

三种可能性:

洗牌

Shuffle您的数组并按顺序提取元素。

记住

提取一个随机元素并将其存储到 NSSet 中。如果您下次提取一个,请检查它是否已经在集合中。 (这是线性时间。)

删除

使用 NSMutableArray 并从数组中删除已经提取的元素。如果您不想修改原始副本,请创建一个可变副本。

哪个最好取决于您的需求。

关于algorithm - 如何在不产生任何重复项的情况下从数组中提取随机元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481110/

相关文章:

java - SPOJ 问题 - 这里出了什么问题?

php - fatal error : Allowed memory size of 25165824 bytes exhausted (tried to allocate 35 bytes)

algorithm - 具有 N 个内部节点的二叉树的最佳情况高度

c++ - 随机生成对象的算法

php - php中的矩阵排列问题

arrays - 如果 NSDecimalNumber 大于 Uint64,如何将 NSDecimalNumber 转换为字节数组?

python - 将 ctypes 字节数组转换为 float 的 Python 列表

c++ - 将文件中的整数扫描到 C 中的数组中?

Javascript:实例化对象数组的最佳方式

JavaScript 数组,返回键 :value pairs with specific key