2016-12-26 65 views
1

我有列表,我想列打印到控制檯的列。 列表看起來像這樣。按列(旋轉)打印2D列表到控制檯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 

什麼是做到這一點的最好的方法? 我已經想到了一些旋轉,但名單是不一樣的長度

+0

@媒體我的問題在我的問題最後解釋 – axcelenator

回答

2

讓我們在預賽的方式進行:

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 

現在您想從底部打印而不是從頂部打印。爲此,當我們算我們的垂直指數,我們開始在max和倒計時的開始,而不是在最小和計數:

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 

有你有它。打印特定順序的字符串只是一系列的逆轉。