【C#入門】配列の使い方をまとめて解説(宣言、初期化、代入、要素数、多次元配列)

  • 2025.10.10
       
【C#入門】配列の使い方をまとめて解説(宣言、初期化、代入、要素数、多次元配列)

プログラムで大量のデータを扱う必要がある時に、値1つ1つに対して変数で管理しようすると、非常に手間がかかって大変となります。
その際に活躍するのが、配列です。

配列は、複数のデータをまとめて取り扱うことができる便利な機能となっています。
今回の記事では、C#で配列を使用する方法について、詳しく解説していきたいと思います。

C#の配列とは?

配列とは、複数の値をまとめて1つの塊として扱うデータ構造のことを言います。
関連するデータを配列としてまとめることで、コードを簡略化したり、データへのアクセスがしやすくなるメリットがあります。

使用するプログラミング言語によっては、定義や機能に多少の違いがある配列ですが、C#の場合は同じデータ型の値のみを格納することができます。
また、宣言時に配列のサイズが固定されるのも特徴の1つです。

配列を宣言/初期化する

配列の具体的な使用方法について、順に確認していきましょう。

基本構文

まずは、C#で配列を宣言する方法から解説していきます。
配列を宣言する際の基本構文は、以下の通りです。

【基本構文】

データ型[] 変数名 = new データ型[要素数];

配列に格納できるデータ型の指定と、いくつの要素を配列内に格納するかのサイズ指定を宣言時に行います。
例えば、int型の要素を3つ格納する配列を作成する場合は、次のように記述します。

【サンプルコード】

int[] numArray = new int[3];

配列の宣言が完了したら、各要素に自動で割り振られるインデックス (添え字) を指定して、値をそれぞれの要素に格納し初期化します。

【サンプルコード】

numArray[0] = 5;
numArray[1] = 10;
numArray[2] = 15;

インデックスの指定はこのように、変数名の後ろに[]で囲って記述する形で行います。
ただし、配列のインデックスは1からではなく0から始まるため、指定の際には注意が必要です。

配列の宣言から初期化までの実際の流れを、以下のサンプルコードで確認してみましょう。

【サンプルコード】

using System;

public class Hello{
    public static void Main(){

        int[] numArray = new int[3];

        numArray[0] = 5;
        numArray[1] = 10;
        numArray[2] = 15;

        Console.Write($"{numArray[0]}\n");
        Console.Write($"{numArray[1]}\n");
        Console.Write($"{numArray[2]}\n");

    }
}

【実行結果】

5
10
15

宣言時に値を入れて初期化する

配列の宣言と初期化は、同時に行うこともできます。

【サンプルコード】

int[] numArray = new int[3] {5, 10, 15};
//以下のどちらかでも可能
// int[] numArray = new[] {5, 10, 15};
// int[] numArray = {5, 10, 15};

Console.Write($"{numArray[0]}\n");
Console.Write($"{numArray[1]}\n");
Console.Write($"{numArray[2]}\n");

【実行結果】

5
10
15

配列に要素を追加する

冒頭でも解説したように、C#の配列のサイズは固定長のため、他の言語の配列やC#のリストのように、後から要素を追加するための機能が用意されていません。
配列で要素を追加したい場合は、代わりに 「Array.Resize」 という、配列のサイズそのものを変更するメソッドを使用して行います。

【基本構文】

Array.Resize (ref 対象の配列, 要素数)

第1引数には、サイズを変更する配列を指定します。
第2引数には、変更後のサイズ (要素数)を数値で指定します。

以下のサンプルコードで動作を確認してみましょう。

【サンプルコード】

int[] numArray = new int[2] {5, 10};
        
Console.Write($"変更前:[{numArray[0]}, {numArray[1]}]\n");
        
// 配列のサイズを変更
Array.Resize(ref numArray, 3);
// 追加した要素を初期化
numArray[2] = 15;
        
Console.Write($"変更後:[{numArray[0]}, {numArray[1]}, {numArray[2]}]\n");

【実行結果】

変更前:[5, 10]
変更後:[5, 10, 15]

Array.Resizeメソッドでサイズを変更しても、既存の値がリセットされることはありません。
ただし、引数に元のサイズよりも小さい値を指定した場合、超過した分の要素は自動で削除されます。

【サンプルコード】

int[] numArray = new int[3] {5, 10, 15};

Array.Resize(ref numArray, 2);

foreach(int num in numArray) {
    Console.WriteLine(num);
}

【実行結果】

5
10

配列の要素数を調べる

配列を使用する際に、特定の配列の要素数を調べたいケースが中にはあるかと思います。
その際に活用できるのが、Lengthプロパティです。

【サンプルコード】

int[] numArray = new int[3] {5, 10, 15};
        
var count = numArray.Length;
        
Console.WriteLine(count);

【実行結果】

3

「配列名.Length」 とすることで、対象の配列の要素数を取得することができます。
配列のサイズを変更する際の確認や、要素の数だけループを回したい場合などに活用できます。

【サンプルコード】

int[] numArray = new int[3] {5, 10, 15};
        
var count = numArray.Length;
        
for (int i = 0; i < numArray.Length; i++) {
    Console.WriteLine($"{i}回目のループです。");
}

【実行結果】

1回目のループです。
2回目のループです。
3回目のループです。

配列をコピーする

変数でデータを扱う方法には、値が直接格納される値型と、データが保存されている場所のアドレスを格納する参照型の2つがあります。
C#の配列は参照型のため、「=」演算子で他の変数に代入をした場合、値の複製ではなくアドレス情報が複製されて代入先の変数に格納されます。

データの複製が行われる値型と異なり、参照型の場合は同じアドレス情報によって同一のデータにアクセスすることになるため、片方の変数の値を変更すると、別の同じアドレスを参照する変数の値も変わってしまうという特徴があります。

コピー後のデータを変数ごとに独立させたい場合は、「Array.Clone」 もしくは 「Array.Copy」 メソッドを使用しましょう。

Array.Cloneメソッドは、対象の配列と同じ中身の配列を複製するメソッドです。

【Array.Clone()の基本構文】

配列名.Clone()

一方、Array.Copyメソッドは、特定の配列の中身を別の配列にコピーするメソッドとなります。

【Array.Copy()の基本構文】

Array.Copy(コピー元の配列, コピー元の開始位置、コピー先の配列, コピー先の開始位置、要素数);

Array.Copyメソッドの第2引数と第4引数については、省略可能となっています。

サンプルコードで、それぞれの動きの違いを見てみましょう。

【サンプルコード】

int[] numArray = new int[3] {5, 10, 15};
        
int[] cloneArray = new int[3];
int[] copyArray = new int[3];
        
cloneArray = numArray.Clone() as int[];
Array.Copy(numArray, 1, copyArray, 0, 2);
        
Console.WriteLine($"clone:[{cloneArray[0]},{cloneArray[1]},{cloneArray[2]}]");
Console.WriteLine($"copy:[{copyArray[0]},{copyArray[1]},{copyArray[2]}]");

【実行結果】

clone:[5,10,15]
copy:[10,15,0]

一点、使用時の注意点として、多次元配列の要素をコピーした場合は挙動が一部異なるので注意してください。

Array.Cloneメソッドと Array.Copyメソッドはどちらも、シャローコピーと呼ばれる方法で値を複製しています。
シャローコピーで値の複製を行った場合、上記のサンプルのような1次元配列の場合は異なる値を参照するようになるため、変更時に別の変数に影響を及ぼすことはありませんが、多次元配列のようにネストされた配列が内部にある場合には、ネストされた配列の方は = で代入した場合と同じ挙動をします。

多次元配列で全ての参照先を変更したい場合は、ディープコピーと呼ばれる方法でコピーする必要があります。
しかしながら、C#にはディープコピーを実現するメソッドは存在しないため、その場合は専用の処理を自前で実装する必要があります。

多次元配列を扱う

これまで紹介してきた配列は、いわゆる1次元配列と呼ばれる基本的な配列です。
一方、配列の種類の中には、多次元配列と呼ばれるものも存在します。

多次元配列とは、配列内の要素に配列を持つ、入れ子状態となっている配列のことを言います。
具体的には、以下のような形式のものを指します。

【サンプルコード】

int[,] numArray = new int[2, 3] {
    {1, 2, 3},
    {4, 5, 6}
};

多次元配列を宣言する際は、型指定をする際の [] の中に、コンマを必要な数だけ記述します。
(上記のように2次元の場合は1つ、3次元の場合は2つ…といった具合)

同様に、それぞれの階層に格納する要素の数を指定する必要があります。

多次元配列で格納した値にアクセスする際は、階層ごとのインデックスをコンマで区切って指定します。
例えば、上記のサンプルの中から3の値を取り出したい場合は、以下のように記述します。

【サンプルコード】

var num = numArray[0, 2];

3の値があるのは、入れ子状態となっている2つの配列のうちの1番目の方なので、最初のインデックス指定では0を指定します。
その配列の中で3がある位置は3番目のため、次のインデックス指定では2を指定しています。

このように、多次元配列の場合は、各階層のどの位置にアクセスしたい値があるかをコンマで区切って指定します。
1次元配列に比べて少々複雑となるため、慣れない間は扱いが難しいかと思いますが、データ操作などでよく使用される形式のため、合わせて使い方を覚えておくようにするといいでしょう。

まとめ

今回は、C#で配列を使用する方法について解説しました。

配列はプログラミングをする上では欠かせない基礎的かつ重要な知識となりますので、しっかりと覚えて活用していきましょう。

C#の勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、C#に限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事