読者です 読者をやめる 読者になる 読者になる

C#_配列のインデックスを再採番 (サイズ変更)

結論。
配列のままではめんどくさそう。
List に変換することにした。

  1. 既にある配列を .ToList< 型 >List 化 し変数に格納。
  2. List を格納したデータを Remove したり Add したりする。
  3. 変更した List を配列に格納

 

ex 1 )
intTest という配列データを Listして intList に格納。
intList のデータの中身を配列 pre1 と pre2 に振り分けるコード。

//配列生成
int[ ] intTest = new int[20];
for (int i = 0; i < 20; i++)
{
    intTest[i] = i;
}

//List に変換
List<int> intList = new List<int>();
intList = intTest.ToList<int>();

//pre1 intList の 0~9 を格納
int[ ] pre1 = new int[10];
for (int i = 0; i < 10; i++)
{
    pre1[i] = intList[0];
    intList.RemoveAt(0);
}

//残った List の要素を pre2 の配列へと格納
int[ ] pre2 = new int[5];
for (int i = 0; i < 5; i++)
{
    pre2[i] = intList[i];
}

 

ex 2 )
intTest という一次配列Listして intList に格納。
intList のデータを 三次元的な配列 arrayThree に変換するコード。
arrayThree は二つの要素を持っており、その中に二次配列を格納。

//配列生成
int[ ] intTest = new int[50];
for (int i = 0; i < 50; i++)
{
    intTest[i] = i;
}

//List に変換
List<int> intList = new List<int>();
intList = intTest.ToList<int>();

//三次元的 List に変換
int indexL = 0;
int[ ][,] pre = new int[2][, ];
for (int a = 0; a < 2; ++a) {
    pre[a] = new int[5,5];
    for (int j = 0; j < 5; j++)
    {
        for (int i = 0; i < 5; i++)
        {
            pre[a][j, i] = intList[indexL];
            ++indexL;
        }
    }
}

//配列へ格納
int[ ][,] arrayThree = new int[2][,];
arrayThree = pre;

 一次元配列 intTest を
f:id:koshinRan:20170415022634j:plain

三次元的配列 arrayThree に変換。
f:id:koshinRan:20170415022750j:plain

 

以上。