C#_二次元 List と List の配列

List<int>             listA = new List<int>();
List<int[ ]         listB = new List<int[ ]>();
List<List<int>>  listC = new List<List<int>>();

List<int>[ ]          listZ = new List<int>[n];

の違いについて。

 

箱は List 型
List<int>             → 中に入っている小箱は int 型
List<int[ ]>         → 中に入っている小箱は int 型の配列
List<List<int>> → 中に入っている小箱は int 型の List

箱は 配列型
List<int>[ ]         → 中に入っている小箱は int 型の List

 

List<int>

f:id:koshinRan:20170615011201j:plain

サイズ( Listの長さ )は決まっていない

    listA.Add(10);
    listA.Add(11);
    listA.Add(12);

 

List<int[ ]>

f:id:koshinRan:20170615012254j:plain

listB のサイズ決まっていない
だが、listB の要素の中身 int[ ] なので、サイズは決まっている

    //各要素の int[ ] は異なる長さでもOK
    listB.Add(new int[4] { 40, 41, 42, 43 });
    listB.Add(new int[3] { 30, 31, 32 });
    listB.Add(new int[2] { 20, 21});

 

List<List<int>>

f:id:koshinRan:20170615012354j:plain

listCサイズ決まっていない
listC の要素の中身も List なので、サイズは決まっていない

    listC.Add(new List<int>());
    listC[0].Add(10);
    listC[0].Add(11);

    List<int> e = new List<int>();
    e.Add(99);
    e.Add(88);
    e.Add(77);
    e.Add(66);
    listC.Add(e);
   
    //listC[0] => 10, 11
    //listC[1] => 99, 88, 77, 66

 

List<int>[ ]

listZ配列なのでサイズは決まっている
だが、listZ の要素の中身は List なので、サイズは決まっていない

f:id:koshinRan:20170615013037j:plain

    //List<int>[] listZ = new List<int>[4];
    //↑ は、( List型で要素を 4 つ持つ )配列のインスタンス作成。

    //List のインスタンスは作成されていない。する必要がある。
    listZ[0] = new List<int>();
    listZ[1] = new List<int>();
    listZ[2] = new List<int>();
    listZ[3] = new List<int>();

    listZ[0].Add(100);
    listZ[0].Add(101);
    listZ[0].Add(102);

    listZ[1] = e;
    listZ[2] = listA;

    List<int> l = new List<int>();
    l.Add(300);
    l.Add(301);
    listZ[3] = l;
   
    //listZ[0] => 100, 101, 102
    //listZ[1] => 99, 88, 77, 66
    //listZ[2] => 10, 11, 12
    //listZ[3] => 300, 301

 

以上。