こんにちは!エンジニアの中沢です。
C#には同じデータ型の値を複数取り扱うための配列があります。配列を使うと同じデータ型の変数を複数宣言する必要がなくなるため、簡潔にコードを記述することができるようになります。
また、for文などのループ処理を行う場合にも配列を使えば簡単に行うことができます。
この記事では、
- 配列とは
- 配列の宣言と初期化をする方法
- 配列の要素を取得する方法
- 配列に要素を追加する方法
- 配列の要素数(サイズ)を調べる方法
- 配列をコピーする方法
- 配列を結合する方法
- 配列をソートする方法
- 多次元配列の使い方
などの基本的な内容から、応用的な使い方に関しても解説していきます。
今回はこれらの方法を覚えるために、配列のさまざまな使い方をわかりやすく解説します!
配列とは
配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるモノです。
配列の値は順番に並べられていて、特定の値を取り出したすこともできます。例えば、10人の年齢をプログラムで保持するのに、int型の変数を10個宣言し格納することもできます。
しかし配列を使用すれば、一人一人の年齢を格納する変数を宣言しなくても、一つの配列の宣言だけで全員分の年齢を順番に格納することができます。
配列の宣言と初期化をする方法
基本的な初期化の方法
配列の宣言をするには次のように記述します。
データ型[] 変数名;
配列の宣言と初期化をする方法を次のプログラムで確認してみましょう。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3]; numbers[0] = 4; numbers[1] = 5; for(int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
実行結果:
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は0です。
このプログラムでは、配列を宣言した後に1つずつ値を追加して初期化しています。配列の要素はインデックス番号の添え字を使って取得して表示しています。値を追加していない場合は「int型」の初期値の「0」が初期値として入っています。
一括で初期化する方法
配列は宣言と同時に値を入れて一括で初期化することができます。
次のプログラムで確認してみましょう。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; for(int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
実行結果:
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は6です。
このプログラムでは、配列の宣言と同時に値を追加して初期化しています。配列の宣言と初期化についてはこちらの記事で詳しく解説しているのでぜひ確認してください。
配列に要素を追加する方法
配列に要素を追加するには、「Array.Resizeメソッド」を使い配列のサイズを変更します。
「Array.Resizeメソッド」は、第1引数にサイズを変更する配列を指定し、第2引数に変更後のサイズを指定して使用します。配列に要素を追加する方法を次のプログラムで確認してみましょう。
using System; namespace sample { class Program { static void Main() { int[] numbers = new int[3] { 4, 5, 6 }; Array.Resize(ref numbers, numbers.Length + 1); numbers[numbers.Length - 1] = 7; for (int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
実行結果:
1番目の要素の値は4です。 2番目の要素の値は5です。 3番目の要素の値は6です。 4番目の要素の値は7です。
このように「Array.Resizeメソッド」を使って配列のサイズを変更して要素を追加できることが確認できました。
配列の要素数(サイズ)を調べる方法
処理の途中で配列の要素数(サイズ)が変わる場合には、配列の要素数を調べる必要があります。配列の要素数を取得するには、「Lengthプロパティ」を使用します。
配列の要素数を調べる方法を次のプログラムで確認してみましょう。
using System; namespace Sample { class Program { static void Main() { int[] numbers = { 0, 1, 2, 3 }; for (int i = 0; i < numbers.Length; i++) { Console.WriteLine("{0}番目の要素の値は{1}です。", i + 1, numbers[i]); } } } }
実行結果:
1番目の要素の値は0です。 2番目の要素の値は1です。 3番目の要素の値は2です。 4番目の要素の値は3です。
このプログラムでは、for文のループの条件式に「Lengthプロパティ」を使って配列の要素数だけ処理を繰り返しています。配列の要素数を取得する方法は次の記事で詳しく解説しているのでぜひ確認してください。
配列をコピーする方法
配列は参照型なので、「=」演算子でコピーすると参照のコピーになり、片方の値を変えるともう片方の値も同じように変わってしまいます。これをシャローコピーと言います。
これに対して、参照先を変えてコピーすることをディープコピーと言います。配列をディープコピーするには「Array.Copyメソッド」を使用します。
配列をコピーする方法を次のプログラムで確認してみましょう。
using System; namespace ArrayCopy { class ArrayCopy { static void Main() { char[] src = {'a', 'b', 'c'}; char[] dst = new char[src.Length]; Array.Copy(src, dst, src.Length); Console.WriteLine("[{0}]", string.Join(", ", dst)); Console.ReadKey(); } } }
実行結果:
[a, b, c]
このプログラムでは、「Lengthプロパティ」を使って配列の要素数を取得し、「Array.Copyメソッド」の引数に指定してコピーしています。
配列をコピーする方法についてはこちらの記事で詳しく解説しているのでぜひ確認してください。
配列を結合する方法
配列の結合は「Array.Copyメソッド」で行うことができます。
次のプログラムで確認してみましょう。
using System; namespace Sample { class Sample { static void Main() { char[] src1 = {'a', 'b', 'c'}; char[] src2 = {'d', 'e', 'f'}; char[] dst = new char[src1.Length + src2.Length]; Array.Copy(src1, dst, src1.Length); Array.Copy(src2, 0, dst, src1.Length, src2.Length); Console.WriteLine("[{0}]", string.Join(", ", dst)); Console.ReadKey(); } } }
実行結果:
[a, b, c, d, e, f]
このサンプルコードでは、まず結合元の配列「src1」と「src2」を用意しています。そして、結合後の配列「dst」を宣言、定義しています。配列「dst」の要素数は「src1」と「src2」の要素数を足し合わせた数です。
まず、Array.Copyメソッドで配列「src1」を「dst」にコピーしています。次に、配列「src2」を「src1」の後に結合するように「Array.Copyメソッド」でコピー先の範囲を指定してdstにコピーしています。
配列を結合する方法についてはこちらの記事で詳しく解説しているのでぜひ確認してください。
配列をソートする方法
配列をソートして順番に並べ替えるには、「Array.Sortメソッド」を使います。
配列をソートする方法を次のプログラムで確認してみましょう。
using System; namespace Sample { class Sample { static void Main() { int[] src = {3, 1, 5, 4, 2}; Array.Sort(src); Console.WriteLine("[{0}]", string.Join(", ", src)); Console.ReadKey(); } } }
実行結果:
[1, 2, 3, 4, 5]
このプログラムでは、「Array.Sortメソッド」を使ってint型の配列の要素を昇順に並び替えています。
配列をソートする方法についてはこちらの記事で詳しく解説しているのでぜひ確認してください。
まとめ
いかがでしたか?
今回は配列を扱う様々な方法をまとめて解説しました。
詳しい使い方はそれぞれのリンク先の記事で解説しているのでぜひ確認してください。もし配列の使い方を忘れてしまったらこの記事を思い出してくださいね!