C# 配列チュートリアル: 作成、宣言、初期化

⚡ スマートサマリー

C#の配列は、同じデータ型を持つ固定サイズの要素を、1つの変数名の下に格納します。各要素は0から始まるインデックスに配置されるため、値の宣言、初期化、およびアクセスは高速かつ予測可能なものとなります。

  • 📌 定義: 配列は、単一の変数を通してアクセスできるインデックス付き位置に、同じ型の複数の値を保持します。
  • ✅ 宣言: データ型の後に角括弧と名前が続くと配列が宣言されます。たとえば、Int32[] values のように指定します。
  • 🔢 初期化: new キーワードはサイズを設定し、各インデックスには values[0]=1 のような値が割り当てられます。
  • 🔍 アクセス: ゼロベースのインデックスは任意の要素を読み書きするため、最初の項目は values[0] であり、カウントは 0 から始まります。
  • 🔁 反復: foreachループはインデックスを指定せずにすべての要素を走査するため、大きな配列での範囲外エラーを回避できます。
  • 🤖 AI支援: GitHub Copilotは配列の定型コードを生成し、ML.NETは数値配列を機械学習モデルの特徴量として読み込みます。

C# 配列

C# の配列とは何ですか?

配列は、コレクションまたは一連の要素を格納するために使用されます。 これらの要素は同じタイプになります。

たとえば、整数値の配列がある場合、その配列は [1, 2, 3, 4] などの値のコレクションになる可能性があります。 ここで、配列の要素数は 4 です。

配列は、同じ型の値のコレクションを格納する場合に便利です。 したがって、宣言する代わりに、 変数 すべての要素に対して、XNUMX つの変数を宣言するだけで済みます。

この変数は、配列の要素を格納する役割を担う配列または要素のリストを指します。

C# で配列を操作する方法を見てみましょう。 この例では、整数の配列を宣言し、それに応じて操作します。

以下のコードはすべて Program.cs ファイルに対して作成されていることに注意してください。

ステップ1) 配列の宣言 – 最初のステップは配列を宣言することです。 以下のコード例でこれを実現する方法を見てみましょう。

C# の配列

Code 説明:-

  1. 最初の部分は、 データ・タイプ。 配列で使用される要素のタイプを指定します。 したがって、この例では、整数の配列を作成しています。
  2. XNUMX 番目の部分 [ ] は、配列のランクを指定します。 (ランクは、配列に含まれる要素の数を指定するプレースホルダーです)
  3. 次は配列の名前で、この場合は「values」です。 緑色の波線の下線が表示されていますが、心配する必要はありません。 これは、.Net が配列を宣言したことを示しているだけですが、それをどこにも使用していません。

ステップ2) 次のステップは、配列を初期化することです。 ここでは、配列が保持する値の数を指定します。 また、配列の各要素に値を割り当てます。

C# の配列

Code 説明:-

  1. まず、配列が保持する要素の数を 3 に設定します。つまり、角括弧内では、配列が 3 つの要素を保持することを示しています。
  2. 次に、配列の各要素に値を代入します。これは、変数名と配列内のインデックス位置を指定することで行えます。したがって、values[0]は、配列の最初の位置に値を格納することを意味します。同様に、2番目の位置にアクセスするには、values[1]という表記を使用し、以降も同様です。

お願い: – 配列では、インデックス位置は 0 から始まります。

ステップ3) 次に、配列の個々の要素をコンソールに表示してみましょう。 これを実現するために、以下のコードを追加しましょう。

C# の配列

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args) 
  {
   Int32[] value;
   value=new Int32[3];
   
   value[0]=1;
   value[1]=2;
   value[2]=3;
   
   Console.WriteLine(value[0]);
   Console.WriteLine(value[1]);
   Console.WriteLine(value[2]);
    
   Console.ReadKey(); 
  }
 }
}

Code 説明:-

これは、 Console.WriteLine メソッドを使用して要素の各値をコンソールに送信するだけの単純な部分です。

繰り返しますが、配列変数名とインデックス位置を使用して各要素にアクセスしていることに注意してください。

上記のコードを正しく入力してプログラムを実行すると、次の出力が表示されます。

出力:

C# の配列

出力から、コンソールに表示されている配列のすべての値を確認できます。

foreach を使用して C# 配列をループ処理する方法

各要素をインデックスで読み込む方法は有効ですが、配列に多くの値が含まれている場合は面倒になります。foreach ループは、配列のすべての要素を順番に処理するより簡潔な方法を提供します。 tracインデックス変数を自分で定義してください。

foreach文は、配列から要素を一つずつ取り出し、ループ変数にコピーします。そして、その変数をループ本体内で使用します。ループは最後の要素で自動的に停止するため、foreachを使うことで配列の末尾を超えて読み込んでしまうリスクを回避できます。

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Int32[] values = new Int32[3] {1, 2, 3};
   foreach (Int32 item in values)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

上記の例では、3 つの整数の配列を宣言して初期化し、foreach を使用してそれを走査します。各パスで変数は 項目 次の値を受け取り、Console.WriteLine でそれを出力します。出力は、1、2、3 という数字がそれぞれ別の行に表示されます。

配列を使ったforeachループに関する重要なポイント:

  • ループ変数は読み取り専用なので、foreach は値を変更するよりも、値を読み取る場合に最適です。
  • 要素を変更するには、ping代わりにインデックス付きのforループを使用してください。
  • foreachは、一次元配列、多次元配列、および反復処理をサポートするあらゆるコレクションで機能します。

C# 多次元配列

これまで紹介した配列は一次元配列であり、単純な値のリストを格納します。C# は多次元配列もサポートしており、要素を行と列のグリッド状に配置します。二次元配列は最も一般的な形式で、行列、ゲーム盤、表などのデータに適しています。

2次元配列は、角括弧の中にカンマを入れることで宣言します。カンマを追加するごとに次元が1つ増えるため、int[,]は2次元配列、int[,,]は3次元配列になります。要素には、次元ごとに1つのインデックスでアクセスできます。

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[,] matrix = new int[2, 2] { {1, 2}, {3, 4} };
   Console.WriteLine(matrix[0, 0]);
   Console.WriteLine(matrix[1, 1]);
   Console.ReadKey();
  }
 }
}

ここで、配列matrixは2行2列です。要素matrix[0, 0]は1を返し、matrix[1, 1]は4を返します。次元数は配列宣言時に固定され、各次元のサイズは配列作成時に設定されます。

C# のギザギザ配列

ジャグ配列とは、要素自体が配列である配列のことです。長方形の多次元配列とは異なり、各内部配列の長さは異なるため、ジャグ配列はしばしば「配列の配列」と呼ばれます。この柔軟性により、行ごとに異なる数の値を保持できる場合に便利です。

ジャグ配列は、2組の角括弧で宣言し、各内部配列を個別に作成します。次の例では、最初の行に3つの値、2番目の行に2つの値が格納されるジャグ配列を作成します。

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[][] jagged = new int[2][];
   jagged[0] = new int[] {1, 2, 3};
   jagged[1] = new int[] {4, 5};
   Console.WriteLine(jagged[0][2]);
   Console.WriteLine(jagged[1][1]);
   Console.ReadKey();
  }
 }
}

式 jagged[0][2] は、1 行目の 3 番目の要素である 3 を読み取り、jagged[1][1] は 2 行目の 2 番目の要素である 5 を読み取ります。各行が独立した配列であるため、行の長さが変化する場合でも、ジャグ配列はメモリを効率的に使用できますが、内部配列を初期化するための追加の手順が必要です。

よくあるご質問

Length プロパティは、C# 配列内の要素の総数を返します。たとえば、values.Length は、3 つの要素を持つ配列に対して 3 を返します。多次元配列の場合、GetLength(dimension) は各次元のサイズを返します。

AC# の配列は作成時にサイズが固定されますが、リストは動的にサイズが増減します。配列は固定データに対して高速でオーバーヘッドも少ないのに対し、リストは実行時に要素数が変化するコレクションに適しています。

標準的な C# 配列は、宣言された単一の型の要素のみを格納するため、異なる型の要素を混在させることはできません。異なる型の要素を保持するには、object[] 配列を宣言するか、ArrayList のようなコレクションを使用しますが、どちらの場合もコンパイル時の型安全性は犠牲になります。

静的メソッド Array.Sort は、C# 配列の要素をその場で昇順に並べ替えます。配列を Array.Sort(values) に渡して、Array を使用します。Reverse その後は降順になります。ソートは数値、文字列、その他の類似の型で機能します。

Array.Copy メソッドは、ある配列からある配列の要素の範囲を別の配列に複製しますが、Clone メソッドは配列全体の浅いコピーを作成します。ある配列変数を別の配列変数に代入しても、参照のみがコピーされ、基となる要素はコピーされません。

IndexOutOfRangeException は、コードが存在しない配列位置にアクセスしようとしたときに発生します。たとえば、3 つの要素を持つ配列で values[5] にアクセスしようとした場合などです。C# の配列は 0 から始まるインデックスを使用するため、有効なインデックスは 0 から Length マイナス 1 までです。必ず最初にインデックスを検証してください。

はい。GitHub Copilot は、Visual Studio 内のコメントまたはメソッド名から配列宣言、初期化、ループロジックを提案します。 VS Code. RevCopilotはオフバイワンエラーや範囲外エラーを引き起こす可能性があるため、正しいサイズ設定とインデックス境界に関する各提案を確認してください。

ML.NET では、特徴ベクトルとモデル入力は C# 配列(通常は float[] 配列)として表現されます。トレーニングデータは配列またはスパンにロードされ、予測結果はスコアの配列として返されます。配列はサイズが固定されており、インデックス付けが高速であるため、機械学習パイプラインにおいて効率的です。