C#を使ったプログラミングに取り組んでいるものの、
・配列がどのようなものか分からない…。
・配列の使い方が知りたい…。
という方も多いのではないでしょうか。そこでこの記事では、
・C#で配列の宣言や初期化を行う方法
・C#における配列のソート方法
などについて解説します。
初心者の方でも、この記事を読めば、C#で配列を扱うための基礎知識が身に付きます。
公開日:2024年7月25日
INDEX
C#の配列とは?
配列の意味はプログラミング言語によって、若干意味合いが違ってきますが、C#においての配列とは、「複数のデータを格納・取り出しができるもの複数のデータの集合」と考えると良いでしょう。
例えば、社員10人の年齢をプログラミングで扱うケースを考えてみます。この場合、配列を使用しないと、次のようなコードで10個の変数を宣言する必要があります。
1 2 3 4 5 6 7 8 9 10 |
int age1; int age2; int age3; int age4; int age5; int age6; int age7; int age8; int age9; int age10; |
一方、配列を使用すれば次のコード例のように1つの配列を宣言するだけで、そこに10人分の年齢を格納できます。
1 |
int[] ages = new int[10]; |
このように、コードを大幅に省略できることや、ミスがあった場合にも簡単に修正できることが配列を使うメリットです。以下の章から、配列の具体的な使い方について説明していきます。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >C#で配列の宣言を行う方法
C# において配列は、宣言しないと使えません。
そして宣言は、格納できる要素の型を使って表現されています。
例えば、int型のデータを格納する配列を作成するならば、
1 |
int[] array1 = new int[10]; // 配列の宣言 |
と宣言します。
これで、int型の要素を10個格納できる配列array1が使えるようになります。
同様に
1 |
double[] array2 = new double[3]; // double型の配列の宣言 |
1 |
object[] array3 = new object[5]; // object型の配列の宣言 |
と書くとdouble型の要素3個格納できるarray2やobject型の要素5個格納できるarray3ができます。
C#で宣言した配列の要素に値を代入する方法
単に配列を宣言しただけでは、配列の各要素に何の値も入っていない状態です。宣言した配列に何らかのデータを格納したいときは、次のようなコードで代入を行います。
1 2 3 4 |
int[] array4 = new int[3]; array4[0] = 3; array4[1] = 5; array4[2] = 7; |
配列を表す変数の後に“[添字]“としたものに代入する形で、配列にデータを格納することが可能です。上記のコード例では、「array4」という配列の0番目の要素として「3」、1番目の要素に「5」、2番目の要素に「7」を代入しています。
また、配列に格納されたデータを取り出して使うコード例は次の通りです。
1 2 3 |
int[] array5 = new int[2]; array5[1] = 3; int data = array5[1]; // 変数data には 3が格納される |
データを代入するときの同様に、配列名に添字を付けて指定することで、格納されているデータを使用できます。上記のコード例では、「array5」という配列の1番目に格納されたデータを、「data」という変数に代入できました。
多次元配列
C#には、多次元配列と呼ばれる機能があります。前述のコード例で解説した配列は、複数のデータが一列に並んだような形で格納される「一次元配列」です。
一方、多次元配列では、行と列をもった表のような形でデータを格納できます。例えば、行と列をもつ多次元配列を宣言するコードは次の通りです。
1 |
int[ , ] matrix; |
このコード例では、行と列という2つの次元をもつ「matrix」という多次元配列が宣言されています。
また、多次元配列を宣言すると同時に、格納するデータを明示的に指定するコード例は次の通りです。
1 2 3 4 5 |
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; |
このように記述すると、「matrix」を3つの行と3つの列を持った多次元配列として作成できます。
多次元配列からデータを取り出したいときは、一次元配列と同様に配列名に添字を付けましょう。
1 2 3 4 5 6 7 8 |
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int element1 = matrix[0, 0] //行インデックス0番、列インデックス0番の「1」が格納される int element2 = matrix[1, 2] //行インデックス1番、列インデックス2番の「6」が格納される |
このコード例では、「element1」に1、「element2」に6が格納されます。
C#で配列の初期化をする方法
配列の初期化とは、宣言した配列に具体的な値を指定して、プログラム上で使えるようにすることです。次のコード例のように、配列を宣言した上で各要素に値を代入すると初期化ができます。
1 2 3 4 |
int[] array = new int[3]; //配列を宣言 array[0] = 3; //値を代入 array[1] = 5; //値を代入 array[2] = 7; //値を代入 |
より短いコードで配列を初期化したい場合、次のような書き方もできます。
1 |
int[] array = new int[3] { 1, 3, 5 }; |
また、代入する値を指定した時点で要素数は決まるため、[3]という部分は省略することも可能です。
1 |
int[] array = new int[] { 1, 3, 5 }; |
さらに、「new int[]」の部分を省略し、次のようなコードでも初期化ができます。
1 |
int[] array = { 1, 3, 5 }; |
それぞれすべて同じ内容を指しているため、分かりやすさや好みで、使う記述方法を決めてください。
C#の配列の要素数を取得する方法
C#の配列にいくつの要素があるかを取得したい場合には、「Array.Length」という機能を使います。
C#の配列は「Array」というクラスを基底クラスとして継承しているため、Arrayクラスが持つデータの情報である「プロパティ」や、操作を行う「メソッド」の利用が可能です。
例えば、Arrayクラスには下記のプロパティやメソッドがあります。
- プロパティ
Length:配列の全ての要素数
Rank:配列の次元
- メソッド
Sort:配列を小さい順に並べる
Reverse:配列を大きい順に並べる
Clear:配列を0で初期化する
Arryクラスの説明は以下のマイクロソフトのドキュメント(英語表記)で調べていただくのがいいでしょう。
今回は、要素数を調べるので、Array.Lengthを使います。
Array.Lengthは全ての要素数を返すプロパティです。for文で配列を処理するときの最大値にも使用できます。
例えば、「array」という配列の要素数を取得するコードは次の通りです。
1 2 |
int[] array = new int[100]; //100個の要素を持つ配列を宣言 int n = array.Length; // arrayの要素数が変数「n」に代入される |
Lengthプロパティは、配列の要素の総数を出力します。
ここでは、int型の要素数100の配列を宣言していますので、nには100が入ります。
C#配列の要素を、繰り返し構文(foreach文)を使って処理する方法
C#で配列の要素一つ一つに対して処理をしていきたいというときは、次のコード例のように「foreach文」を使うことが一般的です。
1 2 3 4 5 |
int[] array = { 1, 2, 3, 4, 5, 6 }; foreach (int element in array) { System.Console.WriteLine(element); } |
上記コードでは、配列「array」の各要素が「element」という変数として参照され、System.Console.WriteLine()でコンソールに出力されます。
C#の繰り返し構文にはfor文もありますが、配列を繰り返し処理するという部分においてメリットはないため、foreach文の使用がおすすめです。
C#配列のソート方法
最後に、配列に格納された要素の順番を変更する「ソート」について解説します。
Array.Sortを用いた配列のソート
「Array.Sort」を使ってソートを行うコード例は次の通りです。
1 2 3 4 5 6 7 8 |
int[] array = { 8, 5, 6, 11, 0, 2 }; Array.Sort(array); // { 0, 2, 5, 6, 8, 11 } に変わっている foreach (int element in array) { System.Console.WriteLine(element); } System.Console.ReadKey(); |
このように、配列「array」をArray.Sortに引数として渡すだけで、中のデータが小さい順にソートされます。
※引数:関数に渡す値のこと
文字列の場合はどうでしょうか?
以下のように文字列の配列も Array.Sort を使ってソートできます。
1 2 3 4 5 6 7 |
string[] array = { "Zulu", "India", "Bravo", "Foxtrot", "シーシャープ", "Alfa" }; Array.Sort(array); // { "Alfa","Bravo","Foxtrot","India","Zulu","シーシャープ" } に変わっている foreach (string element in array) { System.Console.WriteLine(element); } |
上記のコードでは、アルファベット順の英語、その次に日本語という順にソートされます。
Array.Sort以外のソート方法
C#の配列をソートしたい場合、「Array.Sort」以外にもいくつかの方法があります。
・List.Sortでのソート
Array型は要素の数が決まったデータに使う一方、List型は要素の数がプログラム実行中に決まっていく可変長のデータに使われます。
サンプルコードのようにSortメソッドを用いることで、要素を昇順に並べることができます。Sortメソッドの引数には何も設定していません。
1 2 3 4 5 6 7 |
int[] src = {3, 1, 5, 4, 2}; var list = new List<int>(); list.AddRange(src); // listにAddRangeメソッドを使って、要素を追加 list.Sort(); // listをソート Console.WriteLine("[{0}]", string.Join(", ", list)); Console.ReadKey(); |
・ラムダ式でのソート
Sortの引数にラムダ式を指定することで、ソートの条件を変更することができます。
ラムダ式とは、関数を変数のように扱えるようにするものです。例えば、下記のサンプルコードのように、Sortメソッドの引数に、「(a, b) => b – a」を設定することで、降順に並べることが可能です。
1 2 3 4 |
List<int> list = new List<int>() { 3, 1, 5, 4, 2 }; list.Sort((a, b) => b - a); Console.WriteLine("{0}", string.Join(", ", list)); |
・OrderByメソッドでのソート
データの操作を拡張するLINQを使用して、ソートすることも可能です。LINQを使用するためには、コードの先頭に「using System.Linq;」を追加する必要があります。
その上でソートを行うためには、OrderByメソッドを使用します。OrderByメソッドの引数には、比較方法を指定しますが、ラムダ式を使用するのが一般的です
1 2 3 4 5 |
int[] src = {3, 1, 5, 4, 2}; var dst = src.OrderBy(a => a); // LINQのOrderByメソッドでソート Console.WriteLine("[{0}]", string.Join(", ", dst)); Console.ReadKey(); |
このサンプルコードでは、昇順にソートします。
LINQでは複雑な並び替えも実現できます。例えば、血液型でソートするが、血液型が同じ場合は年齢順でソートする、というような処理を、OrderByに続けて、ThenByメソッドを使用することでソートが可能です。
これらのソート方法は、状況に応じて使い分けることがおすすめです。例えば、要素の挿入や削除を行う場合には、動的にサイズを変更できる「List.Sort」が適しています。「ラムダ式」では、要素のプロパティや条件に基づく複雑なソートが可能です。また、「OrderByメソッド」では、複雑な並び替えをよりシンプルなコードで記述できます。
配列を活用してC#を使いこなそう
C#の配列を活用すれば、多くのデータを扱うプログラムを効率的に書き、プログラミングの幅を広げることが可能です。
Udemyでは、C#について学べる講座が揃っています。C#のプログラミングについてさらに詳しく学びたい方には、以下の講座がおすすめです。
一週間で身につくC#言語
Unity・ASP.ENT・Windowsアプリ開発のために必要な基礎プログラミングスキルを身に着けるコース
\無料でプレビューをチェック!/
講座を見てみる評価:★★★★★
ネットや本で勉強するだけでなく、実際にこちらの講義を聴いた方がはるかに分かりやすく、頭に入ってくる事が分かりました。私にとっては非常に良い勉強になり、充実した時間を過ごせました。ありがとうございました。
評価:★★★★★
初めてC#に触れた私でも楽しく受講出来ました。説明が丁寧で、とても分かりやすかったです。
配列の宣言や初期化、ソートの方法などを理解して、C#によるプログラミングに取り組みましょう!
最新情報・キャンペーン情報発信中