从NSMutable数组生成随机数



我需要从一个数组中生成随机数,我已经在for循环中尝试过了

rnd = arc4random_uniform(arr.count); 

它生成了随机数,但有些数字会重复。在数学中也尝试了random((同样的问题仍然存在,请帮帮我。。提前谢谢。。

如果我理解

"我需要从数组中生成随机数">

正确地说,您希望从一个数组中随机抽取数字,如果是这样,那么首先将数字存储在NSMutableArray 中

NSMutableArray *arr=//store your numbers in this array.
-(void)getRandomNumberFromArray:(NSMutableArray *)arr{
int r = arc4random() % arr.count;
int number=[arr objectAtIndex:r];
[arr removeObjectAtIndex:r];
}

为每个元素生成一个随机数,然后检查以确保它与现有元素不同。如果它已经存在,请重试。

for(int i = 0; i < arr.count;i++)
{
   BOOL isRandom = YES;
   int rand = -1;
   while(!isRandom )
   (
     isRandom = YES;
     rand = arc4random() % 5;
     for(int j = 0; j < i; j++)
     {
        int existingNumber = arr[j];
        if(existingNumber == rand)
        {
           isRandom = NO;
           break;
        }
     }
  }
  arr[i] = rand;
}

另一种选择是先将它们赋值为递增值,然后对可变数组进行混洗。什么';打乱NSMutableArray的最佳方法是什么?

如果我理解你的问题,那么你不需要随机数,你需要打乱数组中的元素吗?

然后你需要使用这种方法,

-(void)shuffleWithArray:(NSArray*)cardsArray
{
    NSMutableArray *shuffleArray =[[NSMutableArray alloc]initWithArray:cardsArray];

   // NSUInteger count1=[shuffleArray count];
   for (NSUInteger i= 0; i<[shuffleArray count]; i++) 
    {
    int nElement=[shuffleArray count] -i;
    int n=(arc4random()%nElement + i);
    [shuffleArray exchangeObjectAtIndex:i withObjectAtIndex:n];
  }
}

您可以使用以下函数。

@property (nonatomic,strong) NSMutableArray * numbers;

- (NSInteger) nonRepeatedNumber
{
   if(_numbers == nil)
    {
       _numbers = [[NSMutableArray alloc]init];
    } 
   NSInteger number = arc4random()% arr.count;
   while ([_numbers containsObject:[NSNumber numberWithInt:number]])
   {
       number = arc4random()% arr.count;;
   }
  [_numbers addObject:[NSNumber numberWithInt:number]];
   return number;
}

查看下面的教程。它一定对你有帮助。

iOS随机数生成器

尝试以下方法

 -(NSMutableArray*)randomNumbersfromArray:(NSArray*)array    {
        NSArray *numbers = array;
        int count = [numbers count];
        NSMutableArray *addedIndexes = [[NSMutableArray alloc]initWithCapacity:count];
        NSMutableArray *addedObjects = [[NSMutableArray alloc]initWithCapacity:count];
        int i = 0;
        while ([addedIndexes count] != [numbers count]) {
            int random = arc4random() % count ;
            if (![addedIndexes containsObject:[NSString stringWithFormat:@"%i",random]]) {
                [addedIndexes addObject:[NSString stringWithFormat:@"%i",random]];
                [addedObjects addObject:[numbers objectAtIndex:random]];
                i++;
            }
        }
        return addedObjects;
    }
#include <stdlib.h>

int r = 0;
if (arc4random_uniform != NULL)
    r = arc4random_uniform (arr.count);
else
    r = (arc4random() % arr.count);
int randomNumberFromArray=[arr objectAtIndex:r];

编辑

宾果。经过一番思考,我使其工作

-(NSArray *)randomizeArray:(NSArray *)inputArray
{
    NSMutableArray *checkArray=[[NSMutableArray alloc]initWithCapacity:3];
    NSMutableArray *outputArray=[[NSMutableArray alloc]initWithCapacity:3];
    while ([outputArray count]<[inputArray count])
    {
        int r=[self getRandomNumber:[inputArray count]];
        if ([checkArray containsObject:[NSNumber numberWithInt:r]])
        {

        }
        else
        {
            [checkArray addObject:[NSNumber numberWithInt:r]];
            [outputArray addObject:[inputArray objectAtIndex:r]];
        }
    }
    return outputArray;
}

-(int)getRandomNumber:(int)maxValue
{
    int r = 0;
    if (arc4random_uniform != NULL)
        r = arc4random_uniform (maxValue);
    else
        r = (arc4random() % maxValue);
    return r;
}

randomizeArray:方法将为您提供整个阵列的随机化

最新更新