3

私は2次元行列を持っています。どうすればObjectiveCに転置できますか?

配列クラスと可変配列クラスでメソッドが見つからなかったため、ネストされたループを使用して転置しましたか。

私のマティックスは3x3です。

NSMutableArray *row1=[NSMutableArray arrayWithObjects:@1,@2,@3, nil];
NSMutableArray *row2=[NSMutableArray arrayWithObjects:@4,@5,@6, nil];
NSMutableArray *row3=[NSMutableArray arrayWithObjects:@7,@8,@9, nil];

NSMutableArray *twoDArray=[NSMutableArray arrayWithObjects:row1,row2,row3, nil];
NSLog(@"%@",twoDArray);

この後どうする?

4

3 に答える 3

2

それはそのように簡単です:

NSMutableArray *result = [NSMutableArray arrayWithCapacity:3];

for (NSUInteger i = 0; i < 3; i++) {
    [result addObject:@[row1[i], row2[i], row3[i]]];
}

簡単にするために、常に3x3マトリックスになると仮定しました。

于 2012-12-30T15:07:14.463 に答える
1

この方法を試してください:

NSMutableArray *row1=[NSMutableArray arrayWithObjects:@1,@2,@3, nil];
NSMutableArray *row2=[NSMutableArray arrayWithObjects:@4,@5,@6, nil];
NSMutableArray *row3=[NSMutableArray arrayWithObjects:@7,@8,@9, nil];

NSMutableArray *twoDArray=[NSMutableArray arrayWithObjects:row1,row2,row3, nil];
NSLog(@"%@",twoDArray);

NSMutableArray *transposedArray=[NSMutableArray new];
for (NSInteger i=0; i<[row1 count]; i++) {
    NSArray *array=[NSArray arrayWithObjects:[row1 objectAtIndex:i],[row2 objectAtIndex:i],[row3 objectAtIndex:i],nil];
    [transposedArray addObject:array];
}
NSLog(@"Your transposed array: %@",transposedArray);
于 2012-12-30T15:05:37.200 に答える
0

一般的な長方形のtwoDArrayがあるとします。次に、このメソッドを使用して転置できます。

-(NSArray *)transposedArray:(NSArray *)twoDArray {
    NSUInteger rows = (int) twoDArray.count;
    NSArray *a = twoDArray[0];
    NSUInteger cols = a.count;

    NSMutableArray *transposedTwoDArray = [[NSMutableArray alloc] init];

    for(int i=0; i<cols; i++)
    {
        NSMutableArray *rowArr = [[NSMutableArray alloc] init];
        for(int j=0; j<rows; j++)
        {
            [rowArr addObject:twoDArray[j][i]];
        }
        [transposedTwoDArray addObject:rowArr];
    }

    return transposedTwoDArray;
}
于 2016-01-24T16:54:35.453 に答える