所以,我的任务是在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]]
我是手工完成的,所以请原谅我的随机化程度不高。
答案 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;
}