首页 新闻 会员 周边

C#使用动态二维数组

0
悬赏园豆:10 [已解决问题] 解决于 2017-05-05 08:33

C#语言。动态二维数组arr[3][动态一维数组]的定义和使用?

MRGan的主页 MRGan | 初学一级 | 园豆:71
提问于:2017-05-04 14:24
< >
分享
最佳答案
0

我进行了测试一下 测试代码如下

 1  List<List<int>> list = new List<List<int>>();
 2             List<int> list1 = new List<int>();
 3           
 4             for ( int i=0; i < 3; i++)
 5             {
 6                 list1.Add(i);
 7             }
 8             list.Add(list1);
 9             Console.WriteLine($"list1 {list1[0]},{list1[1]},{list1[2]}");
10             Console.WriteLine($"list {list[0][0]},{list[0][1]},{list[0][2]}");
11             list1.Clear();
12             for (int i=3; i < 6; i++)
13             {
14                 list1.Add(i);
15             }
16             list.Add(list1);
17             Console.WriteLine($"list1 {list1[0]},{list1[1]},{list1[2]}");
18             Console.WriteLine($"list {list[0][0]},{list[0][1]},{list[0][2]}");
19             Console.WriteLine($"list {list[1][0]},{list[1][1]},{list[1][2]}");
20             Console.Read();

我进行了调试,结果发现你起的名字动态,确实是动态的list只是绑定了list1的地址,并没有将list1的数据复制到list中去,只是记录的地址,当你清空list1的时候你会发现list也被清空了,当你对list1进行再次添加值后,进行输出时,他会找到list[0]中存的list1的地址,当输出list[1]时也是在内存中找到list1的地址,由于是一个地址,所以输出的数据是一样的。

知道了原理之后进行修改就容易了, 进行如下的修改就好了

 List<List<int>> list = new List<List<int>>();
            List<int> list1 = new List<int>();
            
            for ( int i=0; i < 3; i++)
            {
                list1.Add(i);
            }
             //在add时进行一个转化,让编译器在内存中开辟另一块额外的空间
            list.Add(list1.ToArray().ToList());
            Console.WriteLine($"list1 {list1[0]},{list1[1]},{list1[2]}");
            Console.WriteLine($"list {list[0][0]},{list[0][1]},{list[0][2]}");
            list1.Clear();
            for (int i=3; i < 6; i++)
            {
                list1.Add(i);
            }
            //这里也一样
            list.Add(list1.ToArray().ToList());
            Console.WriteLine($"list1 {list1[0]},{list1[1]},{list1[2]}");
            Console.WriteLine($"list {list[0][0]},{list[0][1]},{list[0][2]}");
            Console.WriteLine($"list {list[1][0]},{list[1][1]},{list[1][2]}");
            Console.Read();

输出结果截图

收获园豆:10
Bluto | 菜鸟二级 |园豆:317 | 2017-05-04 19:16

非常感谢

MRGan | 园豆:71 (初学一级) | 2017-05-05 08:32

@MRGan: 要学会F10和F11

Bluto | 园豆:317 (菜鸟二级) | 2017-05-05 09:20

@你好世界_qu: 那动态二位数组arr[5][动态一维数组]怎么定义与赋值呢;(二维数组为固定值,一维为动态数组的值。)

MRGan | 园豆:71 (初学一级) | 2017-05-05 14:05

@MRGan: 请告诉我你想实现什么效果

Bluto | 园豆:317 (菜鸟二级) | 2017-05-05 15:38

@MRGan: Ilist<List<int>> list =new List<List<int>> (5);

Bluto | 园豆:317 (菜鸟二级) | 2017-05-05 15:39

@你好世界_qu: 我等会先试试

MRGan | 园豆:71 (初学一级) | 2017-05-05 16:28

@你好世界_qu: 想把"动态一维数组"放入指定的动态二维数组arr[3][]中,或者arr[5][]中

MRGan | 园豆:71 (初学一级) | 2017-05-05 16:38
其他回答(2)
0

List<List<T>>

花飘水流兮 | 园豆:13560 (专家六级) | 2017-05-04 15:11

我想得到正确的运算结果:
array[0][]: 1 2 3
array[1][]: 10 11 12

上图运行结果,array[1][]覆盖了array[0][]的值;这是什么原因

支持(0) 反对(0) MRGan | 园豆:71 (初学一级) | 2017-05-04 16:14

@MRGan:  看一下我的回答,应该是你想要的答案

支持(0) 反对(0) Bluto | 园豆:317 (菜鸟二级) | 2017-05-04 21:35
0

何为动态二维数组?

西漠以西 | 园豆:1675 (小虾三级) | 2017-05-04 16:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册