#7 「配列」C#を分かりたい(プログラミング素人の備忘録)
どうも、最近C#をかじり始めたのでマガジン作って、シリーズぽくしていきたいと思っています。
今回は、配列についてです。
注意
この記事(今シリーズ)は初心者がC#をかじりながら、備忘録のような形で投稿していく予定です。
そのため、今シリーズ全体を通して信憑性は非常に低いです。
また専門の方などから見れば、無茶苦茶なこと、おかしなことをしているかもしれませんが、ご容赦ください。
*この「配列」記事については微妙に間違っていると言うか根本からは理解していないと思うので自信もないです。
前回
配列
配列とは複数のデータをひとまとめのデータとして扱えるようにするものです。
変数は一つのデータしか保有できませんが、配列では複数のデータを一つとして扱えるようになります。
また配列内の値は位置を指定して呼び出すこもできます。
配列の作成
配列は以下の構文で作成できます。
型名[] 変数名;
ただ、変数には実体という実際にメモリを確保するものが必要なので配列の長さを決定します。
型名[] 変数名 = new 型名[長さ];
型名をvar(推論型)にしておけば、以下のようになります。
ちなみに入っている値は1,2,3,です。
var array = new[] {1,2,3,};
//varを使用してるためnewの後の型名は不要
配列の入出力
[]内の値の位置(順番)を指定して読み込めます。順番は[]内の左から0,1,2の順で指定します。これを添字と言うようです。以下に書き換えなどの方法を。使用する配列は上記のarrayを使用しています。
書き換え
array[0] = 0;
これはarrayの0番目(1,)を0に変更しています。[]内の数字を1にすれば2番目の配列に代入できます。
読み出し
Console.WriteLine(array[0]);
先ほど0を代入したので0が表示されます。
多次元配列
多次元配列とは、今までの配列は一列に並ぶ値だったのが表のように二次元で扱うようになったものです。指定は添字を二つ使います。(座標みたいなもんですね。)
ただ、最初の行列番号は0から始まります。
多次元配列の作成
配列の作成の[]の中に,を入れます。,,なら3次元だそうです。varも使えます。
構文
型名[,] 変数名 =
{
{配列}
{配列}
};
例
int[,] array =
{
{1,2,3,},
{4,5,6,},
};
多次元配列の添字では一つ目の数字が行(横),二つ目の数字が列(縦)を表すのでarray[0,0]は0列目の0行目で「1」、array[1,1]は1列目の1行目で5となります。
始めの添字が0なのに注意してください。今回は添字と対応させるために行列も0から始めました。
書き換え
同じ要領です。
以下プログラムの結果
array[0, 0] = 7;
Console.WriteLine(array[0, 0]);
//以下結果
7 //1だった{0,0}が7に変更されました
読み出し
同じ要領です。
以下のプログラムの結果
Console.WriteLine("0,0");
Console.WriteLine(array[0, 0]);
Console.WriteLine("0,1");
Console.WriteLine(array[0, 1]);
Console.WriteLine("1,0");
Console.WriteLine(array[1, 0]);
Console.WriteLine("1,1");
Console.WriteLine(array[1, 1]);
//結果
0,0
1 //[0,0]の結果
0,1
2
1,0
4
1,1
5
ジャグ配列(配列の配列)
多次元配列とは異なり配列の中に配列を入れます。
また、多次元配列では縦横の配列の数が揃っていますがジャグ配列では揃っていません。
ジャグ配列の作成
構文
型名[][] 変数名 = new 型名[][]
{
new 型名[]{配列}
new 型名[]{配列}
};
例
var jug = new[] //varのため型名省略
{
new[] {1,2},
new[] {3,4,5},
};
読み出し
以下参考に。上記のjug変数を使用しています。
Console.WriteLine(jug[0][0]);
Console.WriteLine(jug[1][0]);
//結果
1 //{1,2}配列の0個目
3 //同上
書き換え
書き換えも同じ要領でいけます。
jug[0][0] = 6; //1だった{0,0}を6に変更(代入)
Console.WriteLine(jug[0][0]);
//結果
6 //書き換わった
まとめ
配列は正直よく分かって無いですが、とりあえずは使えるのかな?といったところですが本質は分かってない気がします。何というか使い道があまり思いつかないというか…
あと繰り返し回でこぼしたforeachはもっと分からなかったのでもう少し先になりそうです。
参考
主に参考にさせていただいた、ウェブサイトや書籍のリンクです。
すべてではないですが、ありがとうございます。
「スラスラ分かるC# 第2版」
「一週間で身につくC#言語の基本」
【ワレコC#講座】多段階配列(ジャグ配列)完全マスター【ややこしい】
行列で縦か横か迷ったら