C# ArrayList チュートリアルと例

⚡ スマートサマリー

C# の ArrayList は、System.Collections 名前空間に属する動的コレクションで、要素をオブジェクトとして格納します。配列とは異なり、実行時にサイズが拡張・縮小され、整数、文字列、ブール値を 1 つのリストにまとめて格納できます。

  • 🔄 動的なサイズ調整: ArrayListは実行時に要素を追加および削除するため、配列のように事前に要素数を固定する必要はありません。
  • 📦 オブジェクトストレージ: すべての要素はオブジェクトとして格納されるため、1つのArrayListにint、string、boolなどの異なるデータ型を混在させることができます。
  • コアメソッド: ArrayList の日常的な操作には、add、insert、remove、removeAt、Contains、および sort が含まれます。
  • 📊 人数と収容人数: Countプロパティは現在のアイテム数を返し、Capacityは割り当てられたストレージ容量を返しました。
  • 現代の選択肢: Microsoft コンパイル時の型安全性を高め、ボックス化を回避するため、新しいコードには汎用的なリストを使用することを推奨します。
  • 🤖 AI支援: GitHub CopilotはArrayListコードを生成し、ML.NETパイプラインはC#コレクション型を介してデータを渡します。

C# ArrayList

C# の ArrayList とは?

ArrayList コレクションは、 配列 C# のデータ型。 最大の違いは、配列リスト コレクションの動的な性質です。

配列の場合、配列の宣言時に配列が保持できる要素の数を定義する必要があります。ただし、配列リスト コレクションの場合は、事前に定義する必要はありません。配列リスト コレクションでは、いつでも要素を追加したり削除したりできます。配列リスト コレクションで使用できる操作を詳しく見てみましょう。

配列リストの宣言

ArrayList の宣言を以下に示します。 配列リストは ArrayList データ型を使用して作成されます。 「new」キーワードは、ArrayList のオブジェクトを作成するために使用されます。 次に、オブジェクトは変数 a1 に割り当てられます。 したがって、変数 a1 は配列リストのさまざまな要素にアクセスするために使用されます。

ArrayList a1 = new ArrayList()

配列への要素の追加

add メソッドは、ArrayList に要素を追加するために使用されます。 add メソッドを使用すると、あらゆる種類のデータ型要素を配列リストに追加できます。 したがって、整数、文字列、さらにはブール値を配列リストに追加できます。 加算メソッドの一般的な構文を以下に示します。

ArrayList.add(element)

以下に、「add」メソッドの使用例をいくつか示します。 add メソッドを使用して、さまざまなデータ型を Array List コレクションに追加できます。

以下に、整数の文字列やブール値を配列リスト コレクションに追加する方法の例を示します。

  • a1.add(1) – これはコレクションに整数値を追加します
  • a1.add(“Example”) – これは文字列値をコレクションに追加します
  • a1.add(true) – ブール値をコレクションに追加します。

次に、これがコードレベルで動作することを見てみましょう。 以下のコードはすべて、コンソール アプリケーションに書き込まれます。 コードは Program.cs ファイルに書き込まれます。

以下のプログラムでは、新しい配列リストを作成するコードを記述します。 要素を追加する方法と、配列リストの要素を表示する方法も示します。

C# の ArrayList

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1[0]);	  
   Console.WriteLine(a1[1]);
   Console.WriteLine(a1[2]);
   Console.ReadKey();
  }
 }
}

Code 説明:-

  1. 最初のステップは、配列リストを宣言するために使用されます。 ここでは、配列リストの要素を保持する変数として a1 を宣言しています。
  2. 次に、 add キーワードを使用して、数値 1 、文字列「Example」、およびブール値 'true' を配列リストに追加します。
  3. 次に、Console.WriteLine メソッドを使用して、各配列リスト要素の値をコンソールに表示します。 配列と同様に、インデックス位置を介して要素にアクセスできることがわかります。 したがって、配列リストの最初の位置にアクセスするには、[0] インデックス位置を使用します。 などなど。

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

出力:

C# の ArrayList

出力から、配列リストのすべての要素がコンソールに送信されていることがわかります。

ArrayList の一部として利用できるメソッドをさらにいくつか見てみましょう。

数量カウント

このメソッドは、ArrayList コレクション内の項目の数を取得するために使用されます。 以下は、このステートメントの一般的な構文です。

ArrayList.Count() – このメソッドは、配列リストに含まれる要素の数を返します。

含まれています

このメソッドは、要素が ArrayList コレクションに存在するかどうかを確認するために使用されます。 以下はこのステートメントの一般的な構文です

ArrayList.Contains(element) – このメソッドは、要素がリストに存在する場合は true を返し、それ以外の場合は false を返します。

削除場所

このメソッドは、ArrayList コレクション内の特定の位置にある要素を削除するために使用されます。 以下はこのステートメントの一般的な構文です

ArrayList.RemoveAt(index) – このメソッドは、配列リストの特定の位置から要素を削除します。

次に、これがコードレベルで動作することを見てみましょう。 以下のコードはすべて、コンソール アプリケーションに書き込まれます。 コードは Program.cs ファイルに書き込まれます。

以下のプログラムでは、上記のメソッドをどのように使用できるかを確認するコードを記述します。

C# の ArrayList

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1.Count);
   Console.WriteLine(a1.Contains(2));
   Console.WriteLine(a1[1]);
   a1.RemoveAt(1);
   Console.WriteLine(a1[1]);
   Console.ReadKey();
  }
 }
}

Code 説明:-

  1. したがって、最初に表示されるプロパティは Count プロパティです。 配列リスト a1 の Count プロパティを取得し、それをコンソールに書き込みます。
  2. 1 番目の部分では、Contains メソッドを使用して、ArrayList a2 に要素 XNUMX が含まれているかどうかを確認します。次に、Writeline コマンドを使用して結果をコンソールに書き込みます。
  3. 最後に、要素の削除メソッドを紹介するために、以下の手順を実行します。
    1. まず、配列リストのインデックス位置 1 の要素の値をコンソールに書き込みます。
    2. 次に、配列リストのインデックス位置 1 の要素を削除します。
    3. 最後に、配列リストのインデックス位置 1 の要素の値をコンソールに再度書き込みます。 この一連の手順により、remove メソッドが正常に動作するかどうかがわかります。

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

出力:

C# の ArrayList

最後の値が true になるのはなぜですか?

イベントのシーケンスを見ると、要素 Example は位置 1 にあるため、配列から削除されます。配列の位置 1 は、以前の位置 2 にあった値「true」に置き換えられます。

C#のArrayListをループ処理する方法

ArrayList のすべての要素を読み取ることはよくある作業です。ArrayList は要素をオブジェクトとして格納するため、foreach ループまたは Count プロパティを使用する for ループで要素にアクセスできます。foreach ループはインデックスを必要とせず、各要素を順番に処理するため、最も簡単な方法です。

以下の例では、文字列のArrayListを作成し、各値をそれぞれ別の行に出力します。このコードは、コンソールアプリケーションのProgram.csファイルに記述されています。

ステップ1) System.Collections名前空間をインポートし、3つの項目を持つArrayListを作成します。

ステップ2) foreachループを使用して、各要素をオブジェクトとして読み込み、コンソールに出力します。

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add("Java");
   a1.Add("Python");
   a1.Add("Kotlin");
   foreach (object item in a1)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Code 説明:-

  1. System.Collections名前空間がインポートされているため、ArrayList型がプログラムで使用可能になります。
  2. Addメソッドを使用して、3つの文字列値がArrayListに追加されます。
  3. foreachループは各項目をオブジェクトとして読み込み、Console.WriteLineメソッドはそれを新しい行に出力します。

プログラムを実行すると、次のように出力されます。 Java, Python, コトリン 別々の行に記述してください。Count プロパティを持つ for ループを使用すれば、同じ結果が得られるだけでなく、各要素のインデックス位置も利用できます。

C# ArrayList のメソッドとプロパティ

ArrayListクラスは、要素を管理するための多くの組み込みメソッドとプロパティを提供します。項目の追加や削除だけでなく、コレクションのソート、検索、逆順操作も可能です。最も一般的なメンバーを以下に示します。

Member 詳細説明
追加 ArrayListの末尾に要素を1つ追加します。
インサート 指定したインデックス位置に要素を追加します。
削除します 特定の要素の最初の出現箇所を削除します。
削除場所 指定されたインデックス位置にある要素を削除します。
クリア ArrayListからすべての要素を削除します。
並び替え 要素を昇順に並べ替えます。
Reverse Reverseリスト内の要素の順序。
含まれています 指定された要素がリスト内に存在する場合はtrueを返します。
インデックスオフ 指定された要素のインデックス位置を返します。
数量カウント 格納されている要素の数を返すプロパティ。
容量 リストが保持できる要素の数を返すプロパティ。

これらのメンバーを使用すると、自分でロジックを記述することなく、アイテムの追加、検索、並べ替え、削除を行うことができます。これは、単純な配列ではなくコレクションを使用する主な利点の1つです。

C#におけるArrayListとListの違い

ArrayListと汎用 リスト 実行時に拡張可能なアイテム群を格納するという点では共通していますが、型の扱い方が異なります。この違いを理解することで、最新のC#コードに適したものを選ぶことができます。

主な違いは以下のとおりです。

  • 型式安全性: ArrayListはすべての項目をオブジェクトとして格納するのに対し、Listは宣言された1つの型にバインドされ、コンパイル時にチェックされます。
  • パフォーマンス: ArrayListはintなどの値型をボックス化およびアンボックス化するため、処理に時間がかかりますが、Listはボックス化を避けることで処理速度を向上させています。
  • 名前空間: ArrayList は System.Collections に属し、List は System.Collections.Generic に属します。
  • キャスト: ArrayListから読み込む場合、元の型にキャストし直す必要があることが多いが、Listは正しい型を直接返す。
  • 推奨事項: Microsoft 新規開発にはリスト形式を推奨します。なぜなら、リスト形式の方が安全で、高速で、読みやすいからです。

要するに、ArrayListは古いコードや複数の型が混在するストレージを理解するのに役立ちますが、今日のほとんどのアプリケーションではListが推奨される選択肢です。

よくあるご質問

配列はサイズが固定されており、宣言時に設定された単一のデータ型を格納します。一方、ArrayListは実行時にサイズが拡大縮小し、各項目をオブジェクトとして格納するため、単一のリスト内に様々なデータ型を混在させることができます。

ArrayListは削除されませんが、 Microsoft 新規開発には推奨されません。System.Collections.Generic の汎用 List クラスの方が、型安全性とパフォーマンスが向上するため推奨されます。そのため、最新の C# コードのほとんどは List を使用しています。

ArrayListは項目をオブジェクトとして格納するため、intなどの値型を追加すると、その値がオブジェクトにラップされます。これはボクシングと呼ばれます。読み戻して元の型にキャストする操作はアンボクシングと呼ばれます。これらの操作はいずれもパフォーマンスに影響を与えますが、Listはこれを回避します。

ArrayListは複数の読み取りを同時にサポートしますが、コレクションが変更される際にインスタンスメンバーがスレッドセーフであるとは限りません。安全なマルチスレッド書き込みを行うには、ArrayListでラップしてください。Sync標準化された方法を使用するか、代わりに並行コレクションを使用してください。

Count は現在 ArrayList に格納されている要素の数です。Capacity は、サイズが変更される前に保持できる要素の総数です。Capacity は常に Count 以上であり、アイテムを追加すると自動的に増加します。

Cast メソッドと ToList メソッドを使用して、項目を厳密に型指定されたリストにコピーするか、ToArray メソッドを呼び出してオブジェクト配列を取得できます。型安全性を回復するため、汎用リストへの変換はよく行われます。

はい。GitHub Copilotは、短いコメントまたはメソッド名からArrayListの宣言、呼び出しの追加と削除、ループを生成できます。また、新しいC#コードでは汎用的なListバージョンが推奨されているため、多くの場合、Listバージョンも提案します。

ML.NETは通常、ListやIEnumerableといった汎用コレクションを通してトレーニングデータを読み込み、それらをIDataViewパイプラインにマッピングします。型が厳密に定義されたコレクションを使用することで機械学習データの明確性と型安全性が保たれるため、非汎用のArrayListが直接使用されることはほとんどありません。