演習 - 配列の基本の概要
- 19 分
配列を使用すると、同じ型の複数の値を 1 つの変数に格納できます。 配列に格納されている値は、一般に関連しています。 たとえば、学生名のリストを students という名前の文字列配列に格納できます。
セキュリティ部署にいるあなたの作業は、不正な注文のパターンを見つけることに重点を置いています。 あなたは、コードで過去の顧客注文を確認し、不正な注文に関連付けられているマーカーを識別する必要があります。 会社は、そうしたマーカーを使用して、今後不正な可能性がある発注書が発生したら、処理される前に特定したいと考えています。 確認する必要がある注文の数が常に前もってわかっているわけではないため、各注文 ID を保持するために個別の変数を作成することはできません。 複数の関連する値を保持するデータ構造を作成するにはどうすればよいでしょうか。
この演習では、配列を使用して、オーダー ID のコレクションを格納および分析します。
配列とは
配列は、1 つの変数名を使用してアクセスできる、個別のデータ要素のコレクションです。 配列の各要素にアクセスするには、0 から始まる数値インデックスを使用します。 配列を使用すると、1 つの変数名の下に共通の目的または特性を共有するデータ値のコレクションを作成して、処理を容易にできます。
配列の宣言と配列要素へのアクセス
配列は、同じデータ型の複数の値を保持できる特殊な変数です。 データ型と配列のサイズの両方を指定する必要があるため、宣言の構文は、配列では若干異なります。
コーディング環境を準備する
このモジュールには、サンプル コードをビルドして実行するプロセスをガイドするアクティビティが含まれています。 これらのアクティビティを完了するために、開発環境として Visual Studio Code を使用することをお勧めします。 これらのアクティビティに Visual Studio Code を使用すると、世界中のプロフェッショナルが使用する開発環境でコードの記述と実行をより快適に行うことができます。
Visual Studio Code を開きます。
Visual Studio Code は、Windows の [スタート] メニュー (別の OS の場合は同等のリソース) を使用して開くことができます。
Visual Studio Code の [ファイル] メニューで、[ フォルダーを開く] を選択します。
[ フォルダーを開く] ダイアログで、Windows デスクトップ フォルダーに移動します。
コード プロジェクトを保持するフォルダーの場所が別にある場合は、代わりにそのフォルダーの場所を使用できます。 このトレーニングでは、見つけやすく覚えやすい場所を用意することが重要です。
[ フォルダーを開く ] ダイアログで、[フォルダーの選択] を 選択します。
作成者を信頼するかどうかを確認するセキュリティ ダイアログが表示された場合は、[ はい] を選択します。
Visual Studio Code ターミナル メニューで、[ 新しいターミナル] を選択します。
[ターミナル] パネルのコマンド プロンプトに、現在のフォルダーのフォルダー パスが表示されることを確認します。 次に例を示します。
C:\Users\someuser\Desktop>注
サンドボックスやホスト環境ではなく、自分の PC で作業しており、この C# シリーズの他の Microsoft Learn モジュールを完了している場合は、コード サンプル用のプロジェクト フォルダーが既に作成されている可能性があります。 その場合は、次の手順 (TestProject フォルダーにコンソール アプリを作成するために使用される) をスキップできます。
ターミナル コマンド プロンプトで、指定したフォルダーに新しいコンソール アプリケーションを作成するには、次のプロンプトを入力します。
dotnet new console -o ./CsharpProjects/TestProjectこの .NET CLI コマンドでは、.NET プログラム テンプレートを使用して、指定したフォルダーの場所に新しい C# コンソール アプリケーション プロジェクトを作成します。 このコマンドでは、CsharpProjects および TestProject フォルダーが自動的に作成され、
.csprojファイルの名前として TestProject が使用されます。ファイルが既に存在することを示すメッセージが表示される場合は、次の手順に進みます。 既存のプロジェクト ファイルを再利用します。
エクスプローラー ビューで、 CsharpProjects フォルダーを 展開します。
TestProject フォルダーと、Program.cs という名前の C# プログラム ファイルと TestProject.csproj という名前の C# プロジェクト ファイルの 2 つのファイルが表示されます。
Visual Studio Code の [ファイル] メニューで、[ フォルダーを開く] を選択します。
[ フォルダーを開く ] ダイアログで、 CsharpProjects フォルダーを選択し、[フォルダーの選択] を 選択します。
エクスプローラー ビューで、TestProject フォルダーを展開し、 Program.csを選択します。
既存のコード行を削除します。
この C# コンソール プロジェクトを使用して、このモジュール中のコード サンプルを作成、ビルド、および実行します。
[ターミナル] パネルを閉じます。
新しい配列を宣言する
3 つの要素を保持できる文字列の新しい配列を宣言するには、次のコードを入力します。
string[] fraudulentOrderIDs = new string[3];少し時間を取ってコードを確認してください。
new演算子では、3 つの文字列値を保持できる配列の新しいインスタンスが、コンピューターのメモリ内に作成されます。newキーワードについて詳しくは、「C# を使用して .NET クラス ライブラリからメソッドを呼び出す」モジュールを参照してください。最初の角かっこのセット
[]は、fraudulentOrderIDsという名前の変数が配列であることをコンパイラに示すだけですが、2 番目の角かっこのセット[3]には配列で保持される要素の数が示されていることに注目してください。注
この例は文字列の配列の宣言の方法を示していますが、
intやboolなどのプリミティブや、クラスのようなより複雑なデータ型など、すべてのデータ型の配列を作成できます。 この例では、文字列の単純さを使用して、作業を始めるときに理解する必要がある新しいアイデアの数を最小限に抑えています。
配列の要素に値を代入する
現在は、文字列の配列を宣言しましたが、配列の各要素は空です。 配列の要素にアクセスするには、角かっこの内部で 0 から始まる数値インデックスを使用します。 通常の変数と同じように、= を使用して配列の要素に値を代入できます。
fraudulentOrderIDs配列に注文 ID の値を代入するには、次のようにコードを更新します。string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789";少し時間を取ってコードを確認してください。
配列の名前を使用して配列要素にアクセスしていることに注目してください。 各要素に個別にアクセスするには、角かっこ内にゼロから始まるインデックス番号を指定します。
配列は文字列として宣言されているため、代入する値も文字列である必要があります。 このシナリオでは、配列の要素に注文 ID を代入しています。
配列の範囲外のインデックスを使用してみる
最初はわかりにくいかもしれませんが、配列の要素の数を宣言していることを覚えておくことが重要です。 ただし、配列の各要素にはゼロから始まるインデックスでアクセスします。 そのため、配列の 2 番目の項目にアクセスするには、インデックス 1 を使用します。
初心者は、配列がゼロから始まることを忘れて、存在しない配列の要素にアクセスしようとすることがよくあります。 この間違いを行うと、配列の境界外にある要素にアクセスしようとしたことが通知される実行時例外が発生します。
アプリケーションを意図的に "中断" するには、3 のインデックス値を使用して配列の 4 番目の要素へのアクセスを試みます。
コード ファイルの下部に、次のコード行を入力します。
fraudulentOrderIDs[3] = "D000";コードが以下の例と一致していることを確かめます。
string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; fraudulentOrderIDs[3] = "D000";[Visual Studio Code ファイル ] メニューの [ 保存] を選択します。
エクスプローラー ビューで、TestProject フォルダーの場所でターミナルを開くには、[ TestProject] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナル パネルが開き、 ターミナルが TestProject フォルダーの場所に対して開かれていることを示すコマンド プロンプトが含まれている必要があります。
コードをコンパイルするには、ターミナルのコマンド プロンプトで、「
dotnet build」と入力し、Enter キーを押します。次のメッセージが表示されます。
Build succeeded. 0 Warning(s) 0 Error(s)コードを実行するには、ターミナルのコマンド プロンプトで、「
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
- エラー メッセージ:
ランタイム エラーを生成した行をコメント アウトします。
// fraudulentOrderIDs[3] = "D000";
配列要素に値を代入する方法を確認しました。 次に、配列要素に格納されている値にアクセスする方法について説明します。
配列要素から値を取得する
配列要素の値へのアクセスは、配列要素への値の代入と同じ方法で動作します。 取得する値を持つ要素のインデックスを指定するだけです。
不正な注文 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]}");[Visual Studio Code ファイル ] メニューの [ 保存] を選択します。
エクスプローラー ビューで、TestProject フォルダーの場所でターミナルを開くには、[ TestProject] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナルのコマンド プロンプトで「
dotnet run」と入力し、Enter キーを押します。次のメッセージが表示されます。
First: A123 Second: B456 Third: C789
配列の値を再度代入する
配列の要素は、他の変数値と似ています。 配列の各要素の値は、代入、取得、再度代入することができます。
コード ファイルの最後で、最初の配列要素の値を再度代入して出力するには、次のコードを入力します。
fraudulentOrderIDs[0] = "F000"; Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");コードが以下の例と一致していることを確かめます。
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]}");[Visual Studio Code ファイル ] メニューの [ 保存] を選択します。
エクスプローラー ビューで、TestProject フォルダーの場所でターミナルを開くには、[ TestProject] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナルのコマンド プロンプトで「
dotnet run」と入力し、Enter キーを押します。次のメッセージが表示されます。
First: A123 Second: B456 Third: C789 Reassign First: F000
配列を初期化する
通常の変数と同様に、宣言時に配列を初期化できます。
fraudulentOrderIDs変数を宣言する行をコメント アウトします。複数行コメント (
/* ... */) を使用して、fraudulentOrderIDsの宣言と、配列要素に値を代入するために使用される行をコメント アウトできます。1 つのステートメントで配列を宣言し、初期化するには、次のコードを入力します。
string[] fraudulentOrderIDs = [ "A123", "B456", "C789" ];この例では、C# 12 で導入された コレクション式 の構文を使用します。
配列の初期化に使用する、古い構文も出てくることがあります。
string[] fraudulentOrderIDs = { "A123", "B456", "C789" };この古い構文では、配列の値を囲むのに中かっこ
{}を使用していることに注意してください。 どちらの構文も有効です。注
このトレーニングで使用されている古い構文とコレクション式の構文の組み合わせが出てくる場合があります。
コードが以下の例と一致していることを確かめます。
/* 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]}");少し時間を取って、宣言ステートメントを確認します。
この構文がコンパクトで読みやすくなっていることに注目してください。 アプリケーションを実行しても、出力に変更はありません。
[Visual Studio Code ファイル ] メニューの [ 保存] を選択します。
エクスプローラー ビューで、TestProject フォルダーの場所でターミナルを開くには、[ TestProject] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナルのコマンド プロンプトで「
dotnet run」と入力し、Enter キーを押します。前と同じメッセージが表示されるはずです。
First: A123 Second: B456 Third: C789 Reassign First: F000
配列の Length プロパティを使用する
配列の作成方法によっては、配列に含まれる要素の数が事前にわからない場合があります。 配列のサイズを確認するには、Length プロパティを使用します。
注
配列の Length プロパティはゼロから始まるものではありません。
コード ファイルの最後に、不正な注文の数を報告するには、次のコードを入力します。
Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");このコードは、配列の
Lengthプロパティ (整数) を使用して、fraudulentOrderIDs配列内の要素の数を返します。コードが以下の例と一致していることを確かめます。
/* 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.");Program.cs ファイルに変更を保存し、アプリケーションを実行します。
次の出力が表示されます。
First: A123 Second: B456 Third: C789 Reassign First: F000 There are 3 fraudulent orders to process.
まとめ
ここでは、配列を使用するときに覚えておく必要がある最も重要な点について説明します。
- 配列は、関連するデータ要素のコレクションを保持する特別な変数です。
- 配列変数宣言の基本形式を覚える必要があります。
- 角かっこで囲んだ 0 から始まるインデックスを使用して、配列の各要素にアクセスし、その値を設定または取得します。
- 配列の境界外のインデックスにアクセスしようとすると、実行時例外が発生します。
-
Lengthプロパティを使用すると、プログラムで配列の要素数を判断できます。