如何转置多维数组?

12

我认为这可能是一个相当简单的问题,但我还没能弄清楚。如果我有一个像这样的二维数组:

int[,] matris = new int[5, 8] { 
       { 1, 2, 3, 4, 5,6,7,8 }, 
       {9,10,11,12,13,14,15,16},
       { 17,18,19,20,21,22,23,24 },
       { 25,26,27,28,29,30,31,32 },
       { 33,34,35,36,37,38,39,40 },

        };

并且使用一个类似于这样的for循环:

  for (int r = 0; r < 5; r++)
        {

            for (int j = 0; j < 8; j++)
                Console.Write("{0} ", matris[r, j]);

            Console.WriteLine();
        }

所以,我用这段代码打印出了多维数组。但是怎么打印出数组的转置?


2
“transponent”是什么意思?这不是我以前听说过的术语。 - Jon Skeet
你可以定义一下“转置”(transponent)吗? - Simon Whitehead
也许他的意思是转置?http://zh.wikipedia.org/wiki/转置 - Colin Basnett
抱歉,大家。我是想说“转置”,而不是“编辑”。 - user2669196
参见:https://dev59.com/8XE85IYBdhLWcg3wMQlm#2893367。他们谈论多维数组,但要转置一个[x,y]的数组,只需创建一个新的维度为[y,x]的数组,并相应地分配每个单独的值即可。 - User
2个回答

18

只需将您的循环彼此替换:

for (int j = 0; j < 8; j++)
{
    for (int r = 0; r < 5; r++)
        Console.Write("{0} ", matris[r, j]);

    Console.WriteLine();
}

创建新数组:

var newArray = new int[8, 5];
for (int j = 0; j < 8; j++)
    for (int r = 0; r < 5; r++)
        newArray[j, r] = matris[r, j];

嗯,好的,现在我知道我做错了什么。但是如果我想把转置矩阵保存到一个新数组中怎么办? - user2669196

10

你只需要按照这样做:

for (int r = 0; r < 8; r++)
{
    for (int j = 0; j < 5; j++)
        Console.Write("{0} ", matris[j, r]);
    Console.WriteLine();
}

哦,发得太晚了!这基本上是@MarcinJuraszek发布的相同解决方案 :) - Anna
我认为这是正确的答案。人们只是匆忙地投票支持。 - ataravati
@ataravati 这跟我的完全一样 :) 只是变量名不同了。 - MarcinJuraszek
@MarcinJuraszek,这完全相同,但您在原始问题中交换了变量,这可能会给初学者留下错误的印象,即需要两组循环才能实现此目的。而且,您的评论实际上也是误导性的。 - ataravati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接