Minaminの日記

趣味を記事にしてる。

C#での配列の使い方。

こんにちは。みなみんです。
C#入門シリーズの続きです。

 

今回はC#での配列の使い方を記事にしました。

f:id:Minamin1234:20210812232459p:plain

目次

 

配列

配列とは?

一つの変数で複数の値を扱いたい時って、ありませんか?
「配列」なら複数の値を扱う事ができます。

例えば、点数の平均を計算するアプリケーションがあったとしよう。
大学生徒5000人分の点数を記録する変数を作ります。その時、
いちいち5000個分の変数を宣言しますか?とてつもなく時間がかかり、単純にコード行数を5000行を使う事になります。

これでは、とても効率のよいアプリケーションではないです。
そこで、配列の出番なんですね。

一言で言うのなら、配列というのはその型の複数形の変数っていうイメージです。

 

先ほどの例で、5000人分の点数(整数)を入れる配列を宣言するには、

int[] Points = new int[5000];

これで、5000人分の点数を入れる事ができるのですね。

配列の使い方

まず、配列を使ったサンプルを見てもらいましょう。(Gist)

配列も変数なので宣言は必要です。ただし、配列で宣言する場合は少しだけ勝手が違いますね。

サンプルでも紹介している通り、配列の宣言の方法には主に2つあります。

  • 配列の要素数(長さ、サイズ)を指定して宣言する
  • 配列に直接、初期値を代入して宣言する

(補足)

float型の値を代入する時は、末尾にfを付けます。

0.0f , 3.14f , 2.71f

配列の作成(宣言)

・配列の個数(長さ、サイズ)を指定して作成する方法

(アクセスレベル) 変数の型 変数名 = new 変数の型[要素数]

(アクセスレベル)の部分は関数内(main(string)の中など)で宣言する場合には不要です。

この方法で宣言した場合、配列の中身は全て、初期値で宣言されます。
値系の型は、0
文字列系の型は、""で宣言されます。

 

・初期値を直接代入して宣言する方法

(アクセスレベル) 変数の型[] 変数名 = {値1, 値2, 値3,.....値x};

この方法で宣言した場合、宣言時に初期値を代入した数が配列の要素数になります。
上記の場合、「値1」〜「値x」まであるので要素数はx個になります。

 

要素の参照

・「参照」とは

「変数を参照する」というのは、その変数の中身を読み取る事です。
くれぐれも取り出す事ではないので注意。

・要素の参照

最初のサンプルでも紹介してあるが、要素の参照はそのまま参照したい要素番号を入れてあげるだけ。

変数名[要素番号]

ただし、宣言されている変数の要素数より大きい要素番号を参照してしまうと、「範囲外エラーとなってしまいます。」

素数と要素番号

素数と要素番号は少し違います。

素数は、

配列に格納されている値(要素)の個数

要素番号は、

配列に格納されている値の場所

 

・要素数

素数は配列型の変数を宣言時に決めるもので、その配列に値を入れる事のできるサイズです

 

・要素番号

要素番号はインデックス(Index)とよく呼ばれます。
配列に入れてある値の場所を指す番号の事です。

そして、番号は、「○番目」という数え方ではなく、0から始まる番数です。

f:id:Minamin1234:20210812035010p:plain

配列の表

例えば、上の表のように要素数が10の整数型配列を宣言したとしよう。

「10」という値を参照したい場合、右から4番目に値「10」がありますよね。
要素番号(インデックス)は3です。

 

要するに、「インデックス」は

インデックス = ○番目 - 1

ということです。

今回の例では、4番目でしたのでインデックスは3です。

4番目 - 1 = 3

 

素数の取得

現時点での配列の要素数が知りたい時は、

変数名.Length

で取得する事ができます。

実際にサンプルで確認してみましょう。(Gist)

 

配列内の要素を片っ端から参照する

配列内の要素を全て参照したい時は、for文を使う方法があります。(Gist)

これは、公式サイトでも採用されているごく一般的な手法で、
ローカル変数iが要素数を満たす間はiに1ずつ増やしながら繰り返しているという事です。
そして、iの中身はインデックスっていう事になりますね。

for(int i=0 ; i < 配列の要素数 ; i++){
処理;
}

また、for文以外にもforeach文の方法もあります。(Gist)

こちらの方が、少しスマートですね。
そして、例のごとく公式サイトでも使われている手法です。
ちなみに、これはC#ならではの方法ですね。C++などではforeachという文法はサポートされていませんからね。

また、この例の場合、変数iの中身はインデックスではなく、要素です。くれぐれも間違えないように。

foreach(配列の型 i in 配列の変数){
処理;
}

 

素数の変更

・Arrayクラスのメソッドを用いて要素数を変更する方法

 

宣言後に要素数の変更をしたい場合、メソッド(関数)を用います。

Array.Resize(ref 変数名,要素数);

これはArray(配列)クラスの関数を用いて要素数の変更を行なっています。

ここで、配列の要素数を変更するサンプルを見てもらいましょう。(Gist)

ちゃんと要素数が変更されている事が分かりますよね。

「ref」というワードは、引数に変数の参照を渡すという事です。変数の参照を渡すとその変数の値が関数の実行によって変更されるという事を意味します。

また、同じような書き方として、

Array.Resize<配列の型>(ref 変数名,要素数)

という書き方もあるが、機能自体には全く違いはありません。一緒です。

 

・再び配列を初期化する方法

これは、配列の宣言の時にやるようにnew演算子用いて初期化する方法。

サンプルを紹介します。(Gist)

上記のように、再び初期化を行うと全ての要素が初期値に置き換わり、元の要素は失われるので注意。

 

 

この記事に誤りがあるかもしれません。その辺はご了承ください。

本記事で紹介されている方法・手法はあくまでも個人的なものです。