3

我有一个二维矩阵。我怎样才能在目标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);

在这之后该怎么办?

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 回答