[英]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.