C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でArrayList全体を指定したインデックスから始まる1次元配列にコピーする方法

C#のArrayListクラスには、要素を配列へコピーするためのCopyTo()メソッドが用意されています。このメソッドを使うと、ArrayListの全要素を、指定したインデックスから始まる1次元配列にコピーできます。

CopyToメソッドはオーバーロードされており、ここでは「コピー先の配列」と「コピー開始位置のインデックス」を引数として受け取る形式を使用します。コピー元のArrayListの要素数が、インデックス以降の配列の残り容量を超える場合は例外がスローされる点に注意してください。

サンプルコード1:文字列配列へのコピー

以下の例では、文字列を格納したArrayList全体を、文字列型の1次元配列の先頭(インデックス0)からコピーしています。

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      ArrayList list = new ArrayList();
      list.Add("PQ");
      list.Add("RS");
      list.Add("TU");
      list.Add("UV");
      list.Add("WX");
      list.Add("YZ");

      Console.WriteLine("ArrayListの要素...");
      for (int i = 0; i < list.Count; i++) {
         Console.WriteLine(list[i]);
      }

      String[] strArr = new String[6] {"One", "Two", "Three", "Four", "Five", "Six"};

      Console.WriteLine("\n配列の要素...");
      for (int i = 0; i < strArr.Length; i++) {
         Console.WriteLine(strArr[i]);
      }

      // インデックス0からArrayList全体を配列へコピー
      list.CopyTo(strArr, 0);

      Console.WriteLine("\n更新後の配列の要素...");
      for (int i = 0; i < strArr.Length; i++) {
         Console.WriteLine(strArr[i]);
      }
   }
}

実行結果

ArrayListの要素...
PQ
RS
TU
UV
WX
YZ

配列の要素...
One
Two
Three
Four
Five
Six

更新後の配列の要素...
PQ
RS
TU
UV
WX
YZ

実行結果を見ると、配列の元の値(One〜Six)がすべてArrayListの内容(PQ〜YZ)で上書きされていることがわかります。

サンプルコード2:整数配列への部分的な上書き

次の例では、2つの要素を持つArrayListを、5つの要素を持つ整数配列の先頭からコピーします。ArrayListの要素数より配列の方が大きいため、コピーされなかった後半の要素は元の値のまま残ります。

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      ArrayList list = new ArrayList();
      list.Add(100);
      list.Add(200);

      Console.WriteLine("ArrayListの要素...");
      for (int i = 0; i < list.Count; i++) {
         Console.WriteLine(list[i]);
      }

      int[] intArr = new int[5] {10, 20, 30, 40, 50};

      Console.WriteLine("\n配列の要素...");
      for (int i = 0; i < intArr.Length; i++) {
         Console.WriteLine(intArr[i]);
      }

      // インデックス0からArrayList全体を配列へコピー
      list.CopyTo(intArr, 0);

      Console.WriteLine("\n更新後の配列の要素...");
      for (int i = 0; i < intArr.Length; i++) {
         Console.WriteLine(intArr[i]);
      }
   }
}

実行結果

ArrayListの要素...
100
200

配列の要素...
10
20
30
40
50

更新後の配列の要素...
100
200
30
40
50

ポイントまとめ

  • CopyTo(array, index)は、ArrayListの全要素を配列の指定インデックス以降に順番にコピーします。
  • 配列のサイズが十分でも、ArrayListの要素数が少なければ、残りの要素は元の値のまま維持されます。
  • コピー先のインデックス以降の領域がArrayListの要素数より小さい場合、ArgumentExceptionが発生します。
  • arrayListがnullの場合やindexが範囲外の場合も例外がスローされるため、事前にサイズを確認しておくと安全です。
  1. C#でArrayListの指定したインデックスにある要素を削除する方法

    ArrayListから指定したインデックス位置の要素を削除するには、RemoveAt()メソッドを使用します。このメソッドは、引数に渡されたインデックス番号に対応する要素を削除し、その後ろにある要素は自動的に前に詰められます。インデックスは0から始まるため注意してください。 例1 using System; using System.Collections; public class Demo { public static void Main(String[] args) { ArrayList list1 = new ArrayList(); li

  2. C#のSortedListで指定したインデックスの要素を削除する方法(RemoveAtメソッド)

    C#のSortedListコレクションから、指定されたインデックス位置にある要素を削除するには、RemoveAt()メソッドを使用します。この記事では、RemoveAtメソッドの基本的な使い方を、実際のコード例と実行結果とともにわかりやすく解説します。RemoveAt()メソッドとはRemoveAt(int index)は、SortedList内の指定されたインデックス(0から始まる番号)にあるキーと値のペアを削除するメソッドです。削除後は、後続の要素が自動的に前に詰められ、Countプロパティの値も1つ減少します。サンプルコード1:単一の要素を削除するまずは、SortedListに複数の要素