首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非重复arc4random_uniform

非重复arc4random_uniform
EN

Stack Overflow用户
提问于 2012-04-20 01:30:49
回答 4查看 11.3K关注 0票数 4

多年来,我一直在为我的iPhone应用程序尝试让非重复arc4random_uniform正常工作。我已经在stackoverflow上看过了所有与此相关的问题和答案,但没有运气,现在我希望有人能帮助我。我想做的是在1到104之间选择13个不同的随机数。我已经让它工作到选择了13个不同的数字,但有时其中两个是相同的。

代码语言:javascript
复制
int rand = arc4random_uniform(104);

这就是我要做的,然后我使用rand从数组中进行选择。如果打乱数组,然后从顶部选择13更容易,那么我会尝试这样做,但我需要帮助才能做到这一点,因为这似乎更难。

感谢您的建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-20 01:40:19

不能保证ar4random_uniform()不会重演。想一想--您要求它产生一个介于0和103之间的数字。如果你这样做了105次,它别无选择,只能重复之前的一个选择。该函数如何知道您将请求一个数字的次数?

你将不得不检查你已经得到的数字列表,如果是重复的,请求一个新的数字,或者对数组进行混洗。对于这一点,应该有许多问题。这里有一个最古老的:What's the Best Way to Shuffle an NSMutableArray?

关于不重复的随机数也有很多问题:https://stackoverflow.com/search?q=%5Bobjc%5D+non-repeating+random+numbers

票数 14
EN

Stack Overflow用户

发布于 2014-07-23 05:21:57

您可以创建一个NSMutableSet并像这样实现它:

代码语言:javascript
复制
NSMutableArray* numbers = [[NSMutableArray alloc] initWithCapacity: 13];
NSMutableSet* usedValues = [[NSMutableSet alloc] initWithCapacity: 13];

for (int i = 0; i < 13; i++) {
  int randomNum = arc4random_uniform(104);
  while ([usedValues containsObject: [NSNumber numberWithInt: randomNum]) {     
    randomNum = arc4random_uniform(104)
  }
  [[usedValues addObject: [NSNumber numberWithInt: randomNum];
  [numbers addObject: [[NSNumber numberWithInt: randomNum];
}
票数 2
EN

Stack Overflow用户

发布于 2013-05-29 07:59:38

或者,你也可以创建一个包含105个整数的可变数组,每个整数都是唯一的一个,然后arc4random_uniform(arrayname count),然后从数组中删除相同的数,然后每次都会得到一个不重复的随机整数(尽管数组越小,就越容易预测下一个数字,只是简单的概率)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10233517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档