按列(旋转)打印二维列表到控制台 C#

Print 2D list by columns(rotation) to console C#

我有一些要按列打印到控制台的列表列表。 列表看起来像这样。

List<List<string>> my2DimList = new List<List<string>>();

然后在某个循环中我迭代并添加一些 chars.

for (int i = 0; i < max; i++)
{
    my2DimList.Add(new List<string>());
}

for (int i = 0; i < numLoops; i++)
{
    //Do some work here
    my2DimList[s].Add(my_char);    
}

我想通过以下方式将 chars 打印到控制台。
如果列表包含 2 个包含以下内容的列表:

Jon
Mike    

然后我想这样打印:

 e
nk
oi
JM

最好的方法是什么? 我想过一些轮换,但列表的长度不一样

让我们开始预赛:

var list = new List<List<string>> 
    { 
        new List<string> { "J", "o", "n" }, 
        new List<string> { "M", "i", "k", "e"} 
    };

int h = list.Count;
int w = list.Max(l => l.Count);

那么首先,让我们来看看常规的打印方式是什么样子的:

for (int i = 0; i < h; i++)
{
    for (int j = 0; j < w; j++)
    {
        if (j < list[i].Count)
            Console.Write(list[i][j]);
        else
            Console.Write(" ");
    }

    Console.WriteLine();
}

// Prints:
// Jon
// Mike

现在你想在列中打印它,所以让我们切换 for headers 的顺序:

for (int j = 0; j < w; j++)
{
    for (int i = 0; i < h; i++)
    {
        if (j < list[i].Count)
            Console.Write(list[i][j]);
        else
            Console.Write(" ");
    }

    Console.WriteLine();
}

// Prints:
// JM
// oi
// nk
//  e

现在您想从下向上而不是从上向下打印它。为此,当我们计算垂直索引时,我们从最大值开始向下计数,而不是从最小值开始向上计数:

for (int j = w - 1; j >= 0; j--)
{
    for (int i = 0; i < h; i++)
    {
        if (j < list[i].Count)
            Console.Write(list[i][j]);
        else
            Console.Write(" ");
    }

    Console.WriteLine();
}

// Prints:
//  e
// nk
// oi
// JM

好了。按特定顺序打印字符串只是一系列反转。