次のメソッドは、[0,0,...,0]
で始まる、あなたが取るしたい可能列のインデックスを反復します:
-(NSMutableArray *)nextIndex:(NSMutableArray *)prevIndex {
NSMutableArray newIndex = [NSMutableArray arrayWithArray:prevIndex];
int numCols = [bigArray count];
for (int i=numCols-1; i>=0; --i) {
if ([[prevIndex objectAtIndex:i] intValue] < [[bigArray objectAtIndex:i] count]-1) {
[newIndex replaceObjectAtIndex:i withObject:[NSNumber numberWithInt:[[prevIndex objectAtIndex:i] intValue]+1]];
for (int j=i+1; j<numCols; ++j) {
[newIndex replaceObjectAtIndex:j withObject:[NSNumber numberWithInt:0]];
}
return newIndex;
}
}
return nil;
}
へこれらの行に沿って何かをしてください:
-(NSMutableArray*)matrixArray {
NSMutableArray *matrix = [[NSMutableArray alloc] init];
NSMutableArray *index = [[NSMutableArray alloc] init];
NSMutableArray *values = [[NSMutableArray alloc] init];
int numCols = [bigArray count];
for (int i=0; i<numCols; ++i) {
[index addObject:[NSNumber numberWithInt:0]];
}
while (index != nil) {
[values removeAllObjects];
for (int i=0; i<numCols; ++i) {
[values addObject:[bigArray objectAtIndex:[index objectAtIndex:i]]];
}
[matrix addObject:values];
index = [self nextIndex];
}
return [matrix autorelease];
}
このコードをテストしたりデバッグしたりしなかったことに注意してください。
すぐにお返事ありがとうございます!いくつかのバグを修正すると、これは魅力のように機能します! [values addObject行は、サブ配列から値を取得するためにobjectAtIndexを追加する必要があります。 [matrix addObject:values]は[matrix addObject:[NSArray arrayWithArray:values]]でなければなりません。それ以外の場合は、同じ行へのポインタを取得します。 – carrera4s