演習 - 配列の基本の概要

完了

配列を使用すると、同じ型の複数の値を 1 つの変数に格納できます。 配列に格納されている値は、一般に関連しています。 たとえば、学生名のリストを students という名前の文字列配列に格納できます。

セキュリティ部署にいるあなたの作業は、不正な注文のパターンを見つけることに重点を置いています。 あなたは、コードで過去の顧客注文を確認し、不正な注文に関連付けられているマーカーを識別する必要があります。 会社は、そうしたマーカーを使用して、今後不正な可能性がある発注書が発生したら、処理される前に特定したいと考えています。 確認する必要がある注文の数が常に前もってわかっているわけではないため、各注文 ID を保持するために個別の変数を作成することはできません。 複数の関連する値を保持するデータ構造を作成するにはどうすればよいでしょうか。

この演習では、配列を使用して、注文 ID のシーケンスを格納および分析します。

配列とは

配列は、1 つの変数名を使用してアクセスできる、個別のデータ要素のシーケンスです。 配列の各要素にアクセスするには、0 から始まる数値インデックスを使用します。 ご覧のように、配列を使用すると、共通の目的や特徴を共有する似たデータを、簡単に処理できるように単一のデータ構造にまとめて収集できます。

配列の宣言と配列要素へのアクセス

配列は、同じデータ型の複数の値を保持できる特殊な変数です。 データ型と配列のサイズの両方を指定する必要があるため、宣言の構文は若干異なります。

コーディング環境を準備する

このモジュールには、サンプル コードをビルドして実行するプロセスをガイドするアクティビティが含まれています。 これらのアクティビティを完了するために、開発環境として Visual Studio Code を使用することをお勧めします。 これらのアクティビティに Visual Studio Code を使用すると、世界中のプロフェッショナルが使用する開発環境でコードの記述と実行をより快適に行うことができます。

  1. Visual Studio Code を開きます。

    Visual Studio Code は、Windows の [スタート] メニュー (別の OS の場合は同等のリソース) を使用して開くことができます。

  2. Visual Studio Code の [ファイル] メニューで、[フォルダーを開く] を選択します。

  3. [フォルダーを開く] ダイアログで、Windows のデスクトップ フォルダーに移動します。

    コード プロジェクトを保持するフォルダーの場所が別にある場合は、代わりにそのフォルダーの場所を使用できます。 このトレーニングでは、見つけやすく覚えやすい場所を用意することが重要です。

  4. [フォルダーを開く] ダイアログで、[フォルダーの選択] を選びます。

    作成者を信頼するかどうかを確認するセキュリティ ダイアログが表示された場合は、[はい] を選択します。

  5. Visual Studio Code の [ターミナル] メニューで、[新しいターミナル] を選択します。

    [ターミナル] パネルのコマンド プロンプトに、現在のフォルダーのフォルダー パスが表示されることを確認します。 次に例を示します。

    C:\Users\someuser\Desktop>
    

    Note

    サンドボックスやホスト環境ではなく、自分の PC で作業しており、この C# シリーズの他の Microsoft Learn モジュールを完了している場合は、コード サンプル用のプロジェクト フォルダーが既に作成されている可能性があります。 その場合は、次の手順 (TestProject フォルダーにコンソール アプリを作成するために使用される) をスキップできます。

  6. ターミナルのコマンド プロンプトで、指定したフォルダーに新しいコンソール アプリケーションを作成するには、「dotnet new console -o ./CsharpProjects/TestProject」と入力してから、Enter キーを押します。

    この .NET CLI コマンドでは、.NET プログラム テンプレートを使用して、指定したフォルダーの場所に新しい C# コンソール アプリケーション プロジェクトを作成します。 このコマンドでは、CsharpProjects および TestProject フォルダーが自動的に作成され、.csproj ファイルの名前として TestProject が使用されます。

  7. [エクスプローラー] パネルで、CsharpProjects フォルダーを展開します。

    TestProject フォルダーと、Program.cs という名前の C# プログラム ファイルおよび TestProject.csproj という名前の C# プロジェクト ファイルの 2 つのファイルが表示されるはずです。

  8. [エクスプローラー] パネルの [エディター] パネルにコード ファイルを表示するには、[Program.cs] を選択します。

  9. 既存のコード行を削除します。

    このモジュールでは、この C# コンソール プロジェクトを使用して、コード サンプルを作成およびビルドして実行できます。

  10. [ターミナル] パネルを閉じます。

新しい配列を宣言する

  1. 3 つの要素を保持できる文字列の新しい配列を宣言するには、次のコードを入力します。

    string[] fraudulentOrderIDs = new string[3];
    
  2. 少し時間を取ってコードを確認してください。

    new 演算子では、3 つの文字列値を保持できる配列の新しいインスタンスが、コンピューターのメモリ内に作成されます。 new キーワードについて詳しくは、「C# を使用して .NET クラス ライブラリからメソッドを呼び出す」モジュールを参照してください。

    最初の角かっこのセット [] は、fraudulentOrderIDs という名前の変数が配列であることをコンパイラに示すだけですが、2 番目の角かっこのセット [3] には配列で保持される要素の数が示されていることに注目してください。

    Note

    この例は文字列の配列の宣言の方法を示していますが、intbool などのプリミティブや、クラスのようなより複雑なデータ型など、すべてのデータ型の配列を作成できます。 この例では、文字列の単純さを使用して、作業を始めるときに理解する必要がある新しいアイデアの数を最小限に抑えています。

配列の要素に値を代入する

現在は、文字列の配列を宣言しましたが、配列の各要素は空です。 配列の要素にアクセスするには、角かっこの内部で 0 から始まる数値インデックスを使用します。 通常の変数と同じように、= を使用して配列の要素に値を代入できます。

  1. fraudulentOrderIDs 配列に注文 ID の値を代入するには、次のようにコードを更新します。

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    
  2. 少し時間を取ってコードを確認してください。

    配列の名前を使用して配列要素にアクセスしていることに注目してください。 各要素に個別にアクセスするには、角かっこ内にゼロから始まるインデックス番号を指定します。

    配列は文字列として宣言されているため、代入する値も文字列である必要があります。 このシナリオでは、配列の要素に注文 ID を代入しています。

配列の範囲外のインデックスを使用してみる

最初はわかりにくいかもしれませんが、配列の要素の数を宣言していることを覚えておくことが重要です。 ただし、配列の各要素にはゼロから始まるインデックスでアクセスします。 そのため、配列の 2 番目の項目にアクセスするには、インデックス 1 を使用します。

初心者は、配列がゼロから始まることを忘れて、存在しない配列の要素にアクセスしようとすることがよくあります。 この間違いを行うと、配列の境界外にある要素にアクセスしようとしたことが通知される実行時例外が発生します。

アプリケーションを意図的に "中断" するには、3 のインデックス値を使用して配列の 4 番目の要素へのアクセスを試みます。

  1. コード ファイルの下部に、次のコード行を入力します。

    fraudulentOrderIDs[3] = "D000";
    
  2. コードが以下の例と一致していることを確かめます。

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    fraudulentOrderIDs[3] = "D000";
    
  3. Visual Studio Code の [ファイル] メニューで、[保存] を選択します。

  4. [エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、TestProject を右クリックし、[統合ターミナルで開く] を選択します。

    ターミナル パネルが開き、ターミナルが TestProject フォルダーの場所に対して開かれていることを示すコマンド プロンプトが表示されます。

  5. コードをコンパイルするには、ターミナルのコマンド プロンプトで、「dotnet build」と入力し、Enter キーを押します。

    次のメッセージが表示されます。

    Build succeeded.        
        0 Warning(s)        
        0 Error(s)
    
  6. コードを実行するには、ターミナルのコマンド プロンプトで、「dotnet run」と入力し、Enter キーを押します。

    アプリを実行すると、次のランタイム エラー メッセージが表示されます。

    Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.     
       at Program.<Main>$(String[] args) in C:\Users\someuser\Desktop\CsharpProjects\TestProject\Program.cs:line 6
    

    エラーの次の部分に注目してください。

    • エラー メッセージ: System.IndexOutOfRangeException: Index was outside the bounds of the array.
    • エラーの場所: Program.cs:line 6
  7. ランタイム エラーを生成した行をコメント アウトします。

    // fraudulentOrderIDs[3] = "D000";
    

配列要素に値を代入する方法を確認しました。 次に、配列要素に格納されている値にアクセスする方法について説明します。

配列要素から値を取得する

配列要素の値へのアクセスは、配列要素への値の代入と同じ方法で動作します。 取得する値を持つ要素のインデックスを指定するだけです。

  1. 不正な注文 ID の値を個別に書き込むには、次のようにコードを更新します。

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
  2. Visual Studio Code の [ファイル] メニューで、[保存] を選択します。

  3. [エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、TestProject を右クリックし、[統合ターミナルで開く] を選択します。

  4. ターミナルのコマンド プロンプトで「dotnet run」と入力し、Enter キーを押します。

    次のメッセージが表示されます。

    First: A123
    Second: B456
    Third: C789
    

配列の値を再度代入する

配列の要素は、他の変数値と似ています。 配列の各要素の値は、代入、取得、再度代入することができます。

  1. コード ファイルの最後で、最初の配列要素の値を再度代入して出力するには、次のコードを入力します。

    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  2. コードが以下の例と一致していることを確かめます。

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  3. Visual Studio Code の [ファイル] メニューで、[保存] を選択します。

  4. [エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、TestProject を右クリックし、[統合ターミナルで開く] を選択します。

  5. ターミナルのコマンド プロンプトで「dotnet run」と入力し、Enter キーを押します。

    次のメッセージが表示されます。

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

配列を初期化する

通常の変数と同様に、宣言時に配列を初期化できます。 ただし、配列の要素を初期化するには、中かっこを含む特別な構文を使用します。

  1. fraudulentOrderIDs 変数を宣言する行をコメント アウトします。

    複数行コメント (/* ... */) を使用して、fraudulentOrderIDs の宣言と、配列要素に値を代入するために使用される行をコメント アウトできます。

  2. 1 つのステートメントで配列初期化値を宣言するには、次のコードを入力します。

    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
  3. コードが以下の例と一致していることを確かめます。

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  4. 少し時間を取って、宣言ステートメントを確認します。

    この構文がコンパクトで読みやすくなっていることに注目してください。 アプリケーションを実行しても、出力に変更はありません。

  5. Visual Studio Code の [ファイル] メニューで、[保存] を選択します。

  6. [エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、TestProject を右クリックし、[統合ターミナルで開く] を選択します。

  7. ターミナルのコマンド プロンプトで「dotnet run」と入力し、Enter キーを押します。

    前と同じメッセージが表示されるはずです。

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

配列の Length プロパティを使用する

配列の作成方法によっては、配列に含まれる要素の数が事前にわからない場合があります。 配列のサイズを確認するには、Length プロパティを使用します。

Note

配列の Length プロパティはゼロから始まるものではありません。

  1. コード ファイルの最後に、不正な注文の数を報告するには、次のコードを入力します。

    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    

    このコードは、配列の Length プロパティ (整数) を使用して、fraudulentOrderIDs 配列内の要素の数を返します。

  2. コードが以下の例と一致していることを確かめます。

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    
  3. Program.cs ファイルに変更内容を保存してから、アプリケーションを実行します。

    次の出力が表示されます。

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    There are 3 fraudulent orders to process.
    

まとめ

ここでは、配列を使用するときに覚えておく必要がある最も重要な点について説明します。

  • 配列は、関連する一連のデータ要素を保持する特別な変数です。
  • 配列変数宣言の基本形式を覚える必要があります。
  • 角かっこで囲んだ 0 から始まるインデックスを使用して、配列の各要素にアクセスし、その値を設定または取得します。
  • 配列の境界外のインデックスにアクセスしようとすると、実行時例外が発生します。
  • Length プロパティを使用すると、プログラムで配列の要素数を判断できます。

知識を確認

1.

配列とは

2.

配列を作成して初期化している正しい例は、次のうちどれですか?