2016-12-11 34 views
1

我在C#中創建了二維列表,當我想打印項目時,它沒有顯示任何內容,但列表不是空的。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); 
       } 

上述代碼接收在主方法列表list輸入串與加至main_list。這將在GetSymetricOrder中處理,並使用Display方法顯示。該名單實際上不是空的,因爲該行:

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

實際打印Console.WriteLine("SET"+i);Display方法,但沒有列表項。這裏的例子輸入:

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

,這裏是打印結果:

SET1

SET2

SET3

沒有列表項被印,不要」不知道爲什麼。有什麼我錯過了?,謝謝。

回答

2

問題是,「列表」變量。您將其添加到「main_list」,然後清除它=>「main_list」中的列表也被清除。

基本上不能重複使用「list」變量,因爲「main_list」只包含多次一個實例。解決這個問題的簡單方法就是將一個新列表分配給「list」變量而不是清除它。

+0

是的,我只是簡單地在循環的開始實例化新列表,並工作。謝謝。 –