如何从数组中提取随机元素,而不会产生任何重复

时间:2009-09-26 12:22:36

标签: algorithm arrays

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

即。像这样的东西:

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

由于

1 个答案:

答案 0 :(得分:8)

三种可能性:

洗牌

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

记住

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

删除

使用NSMutableArray并从阵列中删除已提取的元素。如果您不想修改原始版本,请制作可变副本。

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