如何在Objective c中转置矩阵?

时间:2012-12-30 14:58:32

标签: objective-c matrix

我有一个2d矩阵。我怎样才能将它转换为目标c?

我使用嵌套循环来转置它,因为我在数组和mutablearray类中找不到任何方法。

我的matix是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);

此后该怎么办?

3 个答案:

答案 0 :(得分:2)

这很容易:

NSMutableArray *result = [NSMutableArray arrayWithCapacity:3];

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

为了简单起见,我假设它总是3x3矩阵。

答案 1 :(得分: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);

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