2016-12-11 33 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

是的,我只是简单地在循环的开始实例化新列表,并工作。谢谢。 –