在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-C

How 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 arc4randomarc4random_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中生成唯一数字的随机数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中生成随机数

使用循环在数组中生成唯一的随机数

在猫鼬数据库中生成唯一的随机数而不重复?

如何在Objective-C中生成随机大写字符

在 Access 中生成随机字母数字字符串后检查重复项

如何在 Python 中生成唯一 ID? [复制]