2016-12-11 2 views
1

C#で2次元リストを作成しましたが、アイテムを印刷したいときに何も表示されませんでしたが、リストは空ではありません。C# - 2次元リストは印刷できません

public static List<List<string>> GetSymetricOrder(List<List<string>> main_list){ 
      List<List<string>> new_main_list = new List<List<string>>(); 
      List<string> list = new List<string>(); 
      for(int i=0;i<main_list.Count;i++){ 
       for(int j=0;j<main_list[i].Count;j+=2){ 
        list.Add(main_list[i][j]); 
       } 
       if(main_list[i].Count % 2 == 0){ 
        for(int k = main_list[i].Count-1;k>=0;k-=2){ 
         list.Add(main_list[i][k]); 
        } 
       }else{ 
        for(int l = main_list[i].Count-2;l>=0;l-=2){ 
         list.Add(main_list[i][l]); 
        } 
       } 
       new_main_list.Add(list); 
       list.Clear(); 
      } 
      return new_main_list; 
     } 

     public static void Display(List<List<string>> new_main_list){ 
      int i = 1; 
      foreach(var list in new_main_list){ 
       Console.WriteLine("SET"+i); 
       foreach(var s in list){ 
        Console.WriteLine(s); 
       } 
       i++; 
      } 
     } 

    public static void Main(string[] args) 
    { 
       int num; 
       List<List<string>> main_list = new List<List<string>>(); 
       List<string> list = new List<string>(); 
       while((num = int.Parse(Console.ReadLine()))!=0){ 
        for(int i=0;i<num;i++){ 
         string input = Console.ReadLine(); 
         list.Add(input); 
        } 
        main_list.Add(list); 
        list.Clear(); 
       } 

       List<List<string>> SymetricOrder = GetSymetricOrder(main_list); 
       if(SymetricOrder != null){ 
         Display(SymetricOrder); 
       } 

コードは、上記のmainメソッド内のリストlistで入力文字列を受け取り、main_listにリストを追加します。これはGetSymetricOrderで処理され、Displayメソッドを使用して表示されます。

if(SymetricOrder != null){ 
    Display(SymetricOrder); 
} 

実際にはなく、リスト項目のない、Displayメソッド内Console.WriteLine("SET"+i);を印刷:行があるため、リストは実際には空ではありません。ここでは例として入力です:

4 
AAA 
AA 
AAA 
AA 
3 
BBB 
BB 
BBB 
2 
RERE 
RE 
0 

、ここでは、印刷された結果である:いいえリスト項目が印刷されなかった

SET1

SET2

SET3

、ドン」理由を知りません。私が逃したものはありますか?、ありがとう。

答えて

2

問題は「リスト」変数です。それを "main_list"に追加し、それを消去すると、 "main_list"内のリストもクリアされます。

"main_list"には複数のインスタンスが1つしか含まれていないため、基本的に "list"変数を再利用することはできません。これを修正する簡単な方法は、リストをクリアするのではなく、新しいリストを単に "list"変数に割り当てることです。

+0

ええ、私は単にループの始めに新しいリストをインスタンス化して作業します。ありがとう。 –