【问题标题】:How can I extract random elements from an array while not producing any duplicates如何从数组中提取随机元素而不产生任何重复
【发布时间】:2009-09-26 12:22:35
【问题描述】:

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

即像这样:

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

谢谢

【问题讨论】:

  • 当问这样的问题时,尽量不要将它们限制在某些编程语言中。这会带来更多答案,并使问题对更多人更有用。
  • @gs:您建议的所有三个解决方案的实施都需要了解特定语言的语法。将此问题限制为提问者使用的任何语言都是有意义的。
  • 是的。但是问题的作者完全满足于我给他的抽象解释。因此,他本可以要求一个算法。

标签: algorithm arrays


【解决方案1】:

三种可能:

洗牌

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

记住

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

删除

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

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

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2018-10-23
    • 2022-01-25
    • 2014-08-25
    相关资源
    最近更新 更多