2015-01-28 3 views
-4

Итак, мне было поручено рандомизировать многомерный массив в Objective-C.Как рандомизировать многомерный NSMutableArray?

мне нужно сделать это:

[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] 

Посмотрите что-то вроде этого:

[[4,8,6],[1,7,9],[2,11,10],[3,5,12]] 

Я сделал это рукой, поэтому, пожалуйста, простите за плохой рандомизации.

ответ

0

Это то, что я придумал, не стесняйтесь критиковать или улучшать его. Я занял определенные части от existing SO contributions.

-(NSMutableArray *)shuffleArray:(NSMutableArray *)array 
{ 
    NSMutableArray *flatArray = [array valueForKeyPath:@"@unionOfArrays.self"]; 

    NSUInteger count = flatArray.count; 

    for (NSUInteger i = 0; i < count; i++) { 
     NSInteger remainingCount = count - i; 
     NSInteger exchangeIndex = i + arc4random_uniform((u_int32_t)remainingCount); 
     [flatArray exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex]; 
    } 

    NSMutableArray *set = [[NSMutableArray alloc] init]; 
    NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

    for (int i = 0; i < flatArray.count; i++) { 
     [tempArray addObject:flatArray[i]]; 

     if ((i + 1) % 3 == 0) { 
      [set addObject:[tempArray copy]]; 
      [tempArray removeAllObjects]; 
     } 
    } 

    return set; 
}