1. ホーム 
  2. 備忘録 
  3. C Sharp

配列

配列の宣言

C# の配列は型名に [] をつけることで使用できる

配列の宣言方法を以下に記載する

// 長さが5のint型の配列を用意する
int[] valArray = new int[5];

// a,b,c,d,eの文字が入った配列を用意する
char[] charArray = new char[] { a, b, c, d, e };

// 宣言と同時であればnewを省略してもかける
char[] charArray2 = { a, b, c, d, e };

// 配列の中身を書く時、最後の要素については後ろにカンマをつけてもつけなくてもどちらでも良い

多次元配列と配列の配列

行に対して列数が一定になる『(四角い)多次元配列』と呼ばれるものと、行ごとに列数が異なる『配列の配列』がある

仕組み上は『多次元配列』のほうが『配列の配列』より読み書きが速い(ただし最適化のかかり方次第では逆になることもあるらしい)

『多次元配列』は無駄にメモリを使わない点でもメリットがあり、『配列の配列』には上述のとおり行ごとに列数を変えられる点のメリットがある

// 四角い多次元配列
int[,] a = new int[,]{ {1, 2}, {2, 1}, {3,2} }; // 3行2列の行列
int[,] b = new int[,]{ {1, 2, 3}, {2, 1 , 0} }; // 2行3列の行列
int[,] c = new int[3, 3]; // 3行3列の行列(中身は未定義)

for(int i=0; i<a.GetLength(0); ++i) // a.GetLength(0) は a の行数を表す。
{
  for(int j=0; j<b.GetLength(1); ++j) // b.GetLength(1) は b の列数を表す。
  {
    c[i, j] = 0;
    for(int k=0; k<a.GetLength(1); ++k) // a.GetLength(1) は a の列数を表す。
    {
      // a の行データと b の列データをかけて足し合わせる
      c[i, j] += a[i, k] * b[k, j];
    }
  }
}

// 配列の配列
double[][] a = new double[][]{  // 3行2列の行列
  new double[]{1, 2},
  new double[]{2, 1},
  new double[]{0, 1},
  // new double[]{0, 3, 4} // 例えばこのように要素数が違っても問題ない
};
double[][] b = new double[][]{  // 2行3列の行列
  new double[]{1, 2, 0},
  new double[]{0, 1, 2}
};
double[][] c = new double[3][]; // 3行3列の行列
for(int i=0; i<c.Length; ++i)
  c[i] = new double[3];

for(int i=0; i<a.Length; ++i) // a.Length は a の行数を表す。
{
  for(int j=0; j<b[0].Length; ++j) // b[0].Length は b の列数を表す。
  {
    c[i][j] = 0;
    for(int k=0; k<a[0].Length; ++k) // a[0].Length は a の列数を表す。
    {
      // a の行データと b の列データをかけて足し合わせる
      c[i][j] += a[i][k] * b[k][j];
    }
  }
}
  

    参考文献

  1. [C# によるプログラミング入門] 配列