C# - 2尺寸列表无法打印

时间:2016-12-11 15:36:40

标签: c# arrays list

我在C#中创建了二维列表,当我想打印项目时,它没有显示任何内容,但列表不是空的。

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);
}

实际上在Console.WriteLine("SET"+i);方法中打印Display,但没有列表项。以下是示例输入:

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

以下是打印结果:

  

SET1

     

SET2

     

SET3

没有打印列表项,也不知道为什么。我有什么遗漏的吗?谢谢你。

1 个答案:

答案 0 :(得分:2)

问题在于&#34;列表&#34;变量。您将其添加到&#34; main_list&#34;然后清除它=&gt; &#34; main_list&#34;中的列表也被清除了。

基本上你不能重复使用&#34; list&#34;变量,从那以后&#34; main_list&#34;只包含一个实例多次。解决这个问题的一个简单方法就是将新列表分配给&#34;列表&#34;变量而不是清除它。