本記事では複数の値を格納し、扱うことができる『配列』についてです。
少し長くなりますが、ここで書いたことを理解すれば配列で困ることはないでしょう。
配列の宣言・初期化
まずは配列の宣言・初期化についてです。
宣言時に配列を一括で初期化する書式
指定 | 意味 |
変数名 | 「配列の名前」を指定 |
型名 | 「格納する値の型」を指定 |
値 | 「配列に格納する値(要素)」を指定 |
C#の配列は格納する値があらかじめ決まっている場合の宣言記述になります。
そして、具体的な記述の仕方は下のコードのようになります。※10行目。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System; namespace sample { class Program { static void Main() { // 3つの要素(文字列)の入った配列を宣言 var names = new string[] { "田中太郎", "鈴木一郎", "佐々木次郎" }; } } } |
10行目:var names = new string[] { “田中太郎”, “鈴木一郎”, “佐々木次郎” };
『names』という配列を生成している。
その配列には『string型』の値を格納することを指定し、文字列である『3人の名前』を格納している。
配列宣言時に要素・要素数が未定の場合
上の書式では宣言時にあらかじめ値を格納しています。
ですが、状況によっては格納する要素も決まっていなければ、要素数も決まっていない場合があるかと思います。
そういう時には要素数を指定しない配列を使うことで解決します。
その配列の説明をここではしていきます。
要素・要素数が未定の場合の宣言
要素・要素数が未定の配列の『宣言・要素数の指定』の記述は下の通りです。
型名[] 配列名; // 配列を宣言
配列名 = new 型名[要素数] // 配列の要素数を指定
上の記述で要素・要素数が未定の場合に対応できます。
要素数だけを指定した配列に値を格納する
上で要素数が指定されていない配列の宣言を説明しました。
次にその配列への値を格納する記述は下の通りです。
配列名[インデックス数] = 値;
上までの「要素・要素数が未定の配列の宣言・格納」を合わせると下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; namespace sample { class Program { static void Main() { string[] names; names = new string[3]; names[0] = "田中太郎"; names[1] = "鈴木一郎"; names[2] = "佐々木次郎"; Console.WriteLine(names[0]); // 「田中太郎」と表示 Console.WriteLine(names[1]); // 「鈴木一郎」と表示 Console.WriteLine(names[2]); // 「佐々木次郎」と表示 } } } |
配列に値(要素)を取り出す
配列の要素にはそれぞれ『インデックス』と呼ばれる場所を示した番号が割り振られます。
基本的には、そのインデックスは値が入れられた順に「0」から順に割り当てられます。
そして、配列の要素を取り出すには「配列名[呼び出したい要素のインデックス]」という記述をします。
例えば、下のコードは「2番目に格納された”鈴木次郎”という文字列をコンソールに表示させる」という内容になっています。※11行目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; namespace sample { class Program { static void Main() { var names = new string[] { "田中太郎", "鈴木一郎", "佐々木次郎" }; Console.WriteLine(names[1]); // 「鈴木一郎」が表示される } } } |
宣言後、配列の値(要素)を追加する
宣言時に指定した配列の要素数から要素数を変えたい時があります。
・宣言時に指定した要素数を超えて、新しく値を追加したいとき
・思ったよりも要素を必要としなかったときのサイズダウン
そんなときに配列の要素数を変更するときに使うのが『Array.Resizeメソッド』です。
このメソッドの記述は下の通りです。
Array.Resize(ref サイズを変える配列名, 変更後の要素数);
そして、ここではこの『Array.Resizeメソッド』を使った要素数変更の際のテクニックを紹介します。
配列の要素数を取得する【配列名.Length】
既存の配列の要素数を取得するために使われるのが『Lengthプロパティ』です。
下のコードでLengthプロパティの動きを確認してみます。※11行目です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; namespace sample { class Program { static void Main() { var names = new string[] { "田中太郎", "鈴木一郎", "佐々木次郎" }; Console.WriteLine(names.Length); // コンソールに「3」と表示される } } } |
この「配列名.Length」はfor文などのループ条件で頻繁に使います。
配列の要素数(サイズ)を変更する【Array.Resizeメソッド】
次に配列の要素数を変更するときに使う『Array.Resizeメソッド』の説明です。
このメソッドは宣言時に指定した配列の要素数を超えて値を追加したい時などに使われます。
下は「既存の配列に要素数(3)を1つプラスして4にする」といったコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; namespace sample { class Program { static void Main() { var names = new string[] { "田中太郎", "鈴木一郎", "佐々木次郎" }; Console.WriteLine($"要素数変更前:{names.Length}"); Array.Resize(ref names, names.Length + 1); Console.WriteLine($"要素数変更後:{names.Length}"); } } } |
13行目:Array.Resize(ref names, names.Length + 1);
既存の配列namesの要素数に+1した要素数にしている。
【結論】宣言後、配列の値(要素)を追加する
最後に上までを組み合わせて「宣言後の配列に要素を1つ追加する」というのが下のコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; namespace sample { class Program { static void Main() { var names = new string[] { "田中太郎", "鈴木一郎", "佐々木次郎" }; Array.Resize(ref names, names.Length + 1); names[names.Length - 1] = "山田三郎"; Console.WriteLine(names[3]); } } } |
11行目:Array.Resize(ref names, names.Length + 1);
12行目:names[names.Length – 1] = “山田三郎”;
11行目で既存の要素数に+1をする。
12行目で新しく追加した要素の枠に「山田三郎」という文字列を格納している。
注意『Lengthプロパティ』で取得するのは”最大インデックス数ではなく、要素の数”です。
なので、12行目の配列の最後の要素のインデックスは-1しなければなりません。
実行結果
山田三郎
スポンサーリンク