在Objective-C中生成唯一数字的随机数?
Posted
技术标签:
【中文标题】在Objective-C中生成唯一数字的随机数?【英文标题】:Random number generating unique numbers in Objective-C? 【发布时间】:2011-06-17 11:25:45 【问题描述】:我想在 Objective-C 中生成 1-100 之间的随机数。每个随机数都应该是唯一的,并且与之前生成的随机数不同。
【问题讨论】:
查看有关此主题的许多其他问题,例如***.com/questions/160890/… 使用 arc4random() %(100); 我遇到了这个,我想我应该分享你应该更喜欢 arc4random_uniform(X) 而不是 arc4random() % X 【参考方案1】:检查此链接
Generating Random Numbers in Objective-CHow do I generate random numbers on the iPhone?
int r = arc4random() % 100;
Objective-C: Get random number
-(int)getRandomNumberBetween:(int)from and:(int)to
return (int)from + arc4random() % (to-from+1);
使用方法:
1) 将上述方法实现到您的 .m 文件中
2) 将以下行添加到您的 .h 文件中:
-(int)getRandomNumberBetween:(int)from and:(int)to;
3) 调用方法如下:
int randomNumber = [self getRandomNumberBetween:9 and:99];
//this gets you a random number between 9 and 99
Random Numbers in Objective-C
【讨论】:
【参考方案2】:arc4random() %(100)-1
这对我有用。
【讨论】:
来自man arc4random
:arc4random_uniform() 将返回一个小于upper_bound 的均匀分布的随机数。建议使用 arc4random_uniform() 而非 ``arc4random() % upper_bound'' 之类的结构,因为当上限不是 2 的幂时,它可以避免“模偏差”。
另外,请注意u_int32_t arc4random_uniform(u_int32_t upper_bound)
的上限不包含在内,即arc4random_uniform(1)
将始终为您提供零。【参考方案3】:
使用 arc4random 并将结果存储在 NSSet 中,它会为您处理重复项。
【讨论】:
【参考方案4】:另一个简单的方法是使用 arc4random_uniform() 方法:
调用 arc4random_uniform(N) 返回一个从 0 到 N-1 的随机数。要获取从 1 到 N 的数字,您可以使用:
NSUInteger r = arc4random_uniform(N) + 1;
其中 N 是您要查找的最大数字。在 Swift 中,你可以这样做:
var randomIndex:UInt32 = arc4random_uniform(N) + 1
例如如果你想得到一个介于 1 到 100 之间的随机数,只需调用如下:
NSUInteger r = arc4random_uniform(100) + 1;
或迅速:
var randomIndex:UInt32 = arc4random_uniform(100)+1
【讨论】:
【参考方案5】:这是生成唯一随机数的代码...
-(void)UniqueRandom
int T[11];
BOOL flag;
for(int i=0;i<10;i++)
int ranNo= random()%100+1;
flag=TRUE;
int s=(sizeof T);
for(int x=0;x<s;x++)
if(ranNo==T[x])
i--;
flag= FALSE;
break;
if(flag) T[i]=ranNo;
for(int j=0;j<100;j++) NSLog(@"unique random %d",T[j]);
编码愉快..
【讨论】:
【参考方案6】:此方法会在高低区间内生成唯一随机数数组。
-(void)generateRandomUniqueNumberInRange :(int)rangeLow :(int)rangeHigh
NSMutableArray *unqArray=[[NSMutableArray alloc] init];
int randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;
int counter=0;
while (counter<rangeHigh-rangeLow)
if (![unqArray containsObject:[NSNumber numberWithInt:randNum]])
[unqArray addObject:[NSNumber numberWithInt:randNum]];
counter++;
else
randNum = arc4random() % (rangeHigh-rangeLow+1) + rangeLow;
NSLog(@"UNIQUE ARRAY %@",unqArray);
【讨论】:
以上是关于在Objective-C中生成唯一数字的随机数?的主要内容,如果未能解决你的问题,请参考以下文章