Генерацыі выпадковых лікаў з масіва NSMutable

Мне трэба для генерацыі выпадковых лікаў з масіва Я паспрабаваў гэта ўнутры для цыклу

rnd = arc4random_uniform(arr.count); 

ён генераваў выпадковыя ліку, але некаторыя лічбы атрымаць паўтараецца таксама спрабавалі <�моцны> Random() у math.h усё тая ж праблема захоўваецца, калі ласка, дапамажыце мне .. Загадзя дзякую..

1
Там няма ніякай гарантыі, што ar4random_uniform() не будзе паўтарацца. Падумайце пра гэта на другі - вы просіце яго, каб вырабіць лік паміж 0 і 103. Калі вы зробіце гэта сто пяць разоў, гэта не мае ніякага выбару, акрамя як паўтарыць адну з сваіх папярэдніх выбараў. Як магла функцыю ведаць, колькі разоў вы збіраецеся прасіць нумар? 1
дададзена аўтар Parag Bafna, крыніца
Вы спрабавалі INT R = arc4random ()% 5; Напрыклад, калі вы хочаце 0 у 4 ?
дададзена аўтар Buntylm, крыніца
дададзена аўтар rob mayoff, крыніца
(І многія іншыя)
дададзена аўтар rob mayoff, крыніца
Ofcourse будуць паўторы, таму што яны генеруюцца выпадкова . Калі б быў узор ішоў за пакаленне, то яна не будзе называцца выпадковым чынам правільна?
дададзена аўтар Praveen S, крыніца
Значыць, вы павінны адчуваць сябе масіў па ўнікальных нумарах ў выпадковым парадку? Яшчэ трохі кода можа дапамагчы атрымаць вашу ідэю
дададзена аўтар voromax, крыніца
@PraveenS, як я мог бы атрымаць унікальныя выпадковыя ліку ..
дададзена аўтар Agent Chocks., крыніца

7 адказы

калі я зразумеў

<�Р> «мне трэба для генерацыі выпадковых лікаў з масіва»

Правільна, вы хочаце, каб колькасці, якія будуць узяты з масіва выпадковым чынам, калі так, то  першы запісвайце нумара ў 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];
}
2
дададзена

Генеруе выпадковы лік для кожнага элемента, а затым праверыць, каб пераканацца, што гэта не тое ж самае, як адзін з існых. Калі ён ужо існуе, паспрабуйце яшчэ раз.

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;
}

Another option is to first just assign them to have incrementing values, and then shuffle the mutable array. What's the Best Way to Shuffle an NSMutableArray?

1
дададзена

Калі я зразумеў вашу праблему, то вам не трэба выпадковыя ліку, вам неабходна ператасаваць элементы ў масіве?

Тады вам трэба выкарыстоўваць гэты метад,

-(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];

  }

}
1
дададзена
#include 


int r = 0;
if (arc4random_uniform != NULL)
    r = arc4random_uniform (arr.count);
else
    r = (arc4random() % arr.count);

int randomNumberFromArray=[arr objectAtIndex:r];

<�Моцны> Змяніць

Bingo.After некаторага мыслення я зрабіў гэта працуе

-(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: метад дасць вам ўвесь масіў рандомізірованного

0
дададзена
атрымаць толькі 1-значэнне з масіва ....
дададзена аўтар Jitendra, крыніца
? Адрэдагаваць адказ
дададзена аўтар Lithu T.V, крыніца
@JitendraDeore Зараз гэта працуе выдатна .Tested
дададзена аўтар Lithu T.V, крыніца

Паспрабуйце наступны метад

 -(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;
    }
0
дададзена

Вы можаце выкарыстоўваць наступную функцыю.

@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;
}
0
дададзена
@ Винаяк ў мяне ёсць масіў падліку з'яўляецца 52, але ён атрымае выпадковае значэнне з звязана як 54 60,70 ўсіх гэтых каштоўнасці атрымліваюць ...
дададзена аўтар Jitendra, крыніца
@Vinayak Кіні я паспрабаваў ваш код будзе genrate жа repetative час не ў ...
дададзена аўтар Jitendra, крыніца
гэта не будзе працаваць паўтарыўшы значэнне, якое генеруецца .. я паспрабаваў гэты
дададзена аўтар Jitendra, крыніца
Гэта працуе, але толькі да MaxValue выпадковых лікаў не будзе дасягнута, так што гэта не можа быць выкарыстаны бясконца.
дададзена аўтар pasawaya, крыніца
@qegal немагчыма прасачыць унікальныя бясконцыя выпадковыя ліку! Але OP хоча унікальныя выпадковыя значэння для пэўнага дыяпазону, як паказана.
дададзена аўтар Vinayak Kini, крыніца
ня @JitendraDeore ніякага спосабу значэння паўтараюцца. Вы павінны быць здзейснілі памылку дзе-то!
дададзена аўтар Vinayak Kini, крыніца
@JitendraDeore я думаю, што вы не alloced памяці для масіва лікаў!
дададзена аўтар Vinayak Kini, крыніца
@JitendraDeore код выдатна працуе! вы павінны мець нейкую памылку здзейснілі.
дададзена аўтар Vinayak Kini, крыніца
Дзякуй за дапамогу ...
дададзена аўтар Agent Chocks., крыніца

Праверце ніжэй Tutorial. яна павінна дапамагчы вам.

iOS генератар выпадковых лікаў

0
дададзена