繁体   English   中英

按列(旋转)打印二维列表到控制台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标头的顺序:

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

那里有它。 按特定顺序打印字符串只是一系列冲销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM