如何随机化多维NSMutableArray?

时间:2015-01-28 20:39:58

标签: ios nsmutablearray

所以,我的任务是在Objective-C中随机化一个多维数组。

我需要这样做:

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

看起来像这样:

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

我是手工完成的,所以请原谅我的随机化程度不高。

1 个答案:

答案 0 :(得分: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;
}