2022/2/28

C#の配列まとめ


C#の配列についてまとめました。
大量のデータを扱うときに、多次元配列やジャグ配列を使用すると便利です。

普通の配列

説明は省略。

//① 普通に宣言
int[] a = new int[]{0,1,2,3,4};

//② 暗黙的に宣言
var a = new []{0,1,2,3,4};

//③ 値 All 0で宣言
int[] a = new int[5];

2次元配列

x方向、y方向の平面に値を保存するイメージです。

//① 普通に宣言
int[,] a = new int[,]
{
  {0,1,2},{3,4,5},{6,7,8},{9,10,11},{12,13,14}
};

//② 暗黙的に宣言
var a = new[,]
{
  {0,1,2},{3,4,5},{6,7,8},{9,10,11},{12,13,14}
};

//③ 値 All 0で宣言
int[,] a = new int[5,3];

int[x,y] の値は以下のようになっています。

y=0 y=1 y=2
x=0 0 1 2
x=1 3 4 5
x=2 6 7 8
x=3 9 10 11
x=4 12 13 14

ジャグ配列(配列の配列)

こちらも平面に値を保存するイメージですが、2次元配列と異なって、y軸方向の配列の長さが変えられます。

//① 普通に宣言 その1
int[][] a = new int[3][];
a[0] = new int[]{0, 1, 2};
a[1] = new int[]{3, 4};
a[2] = new int[]{5, 6, 7, 8};

//② 普通に宣言 その2
int[][] a = 
{
  new int[]{0, 1, 2,},
  new int[]{3, 4},
  new int[]{5, 6, 7, 8}
};

//③ 暗黙的に宣言
var a = new[]
{
  new[]{0, 1, 2,},
  new[]{3, 4},
  new[]{5, 6, 7, 8}
};

//④ 値 All 0で宣言
int[][] a = new int[3][];
a[0] = new int[3];
a[1] = new int[2];
a[2] = new int[4];

int[x,y] の値は以下のようになっています。

y=0 y=1 y=2 y=3
x=0 0 1 2 xxx
x=1 3 4 xxx xxx
x=2 5 6 7 8

配列へのアクセス時の便利機能

以下、配列の中身を取り出す際に、便利な方法です。

配列の範囲アクセス

a[i..j]と記述することで、配列のi番目からj番目を指定して取り出すことができます。

var a = new[] { 1, 2, 3, 4, 5 };
var b = a[1..^1];

これで、配列bは、配列a[1]~a[3]の値を代入され、{2, 3, 4}となります。
^1は、後ろから数えて2番目を表しています。(1番目は^0)

多次元配列のforeach

多次元配列にforeachでアクセスする場合、多次元ではなく1次元として処理されます。
つまり、foreach一発で全要素へアクセスすることになります。

ジャグ配列の場合はこの方法は使えません。

var a = new[,]
{
  {0,1,2},{3,4,5},{6,7,8},{9,10,11},{12,13,14}
};

foreach(var i in a)
{
  Console.WriteLine(i);
}

//上記でaの要素すべてを出力する。0 1 2 3 ・・・ 14 となる。

以上です。


コメント(githubのアカウントが必要です)