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

【C#入門】ArrayListの全要素を1次元配列にコピーする方法(CopyToメソッドの使い方)

C#でArrayListのすべての要素を1次元配列にコピーしたい場合は、CopyToメソッドを使用します。このメソッドを呼び出すと、ArrayList内の要素が順番に指定した配列へ複製されます。

CopyToメソッドの基本構文

public virtual void CopyTo (Array array);

引数にはコピー先となる1次元のArrayオブジェクトを指定します。なお、コピー先の配列は、ArrayListの要素数以上のサイズを持っている必要があります。サイズが不足している場合は例外がスローされるので注意しましょう。

例1:文字列のArrayListをString型配列にコピーする

以下のコードでは、文字列を格納したArrayList全体をString[]型の配列にコピーしています。

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      ArrayList list = new ArrayList();
      list.Add("AB");
      list.Add("BC");
      list.Add("CD");
      list.Add("EF");
      list.Add("GH");
      list.Add("IJ");
      list.Add("KL");
      list.Add("MN");

      String[] strArr = new String[10];

      Console.WriteLine("ArrayList...");
      foreach(Object obj in list)
         Console.WriteLine("{0}", obj);

      // ArrayListの全要素を配列へコピー
      list.CopyTo(strArr);

      Console.WriteLine("\nArrayListからコピー後のString配列...");
      foreach(Object ob in strArr)
         Console.WriteLine("{0}", ob);
   }
}

実行結果

ArrayList...
AB
BC
CD
EF
GH
IJ
KL
MN

ArrayListからコピー後のString配列...
AB
BC
CD
EF
GH
IJ
KL
MN

実行結果を見ると、ArrayListの8つの要素がそのまま配列strArrにコピーされていることがわかります。ここでは配列サイズを10としているため、残りの2要素(インデックス8と9)はnullのままになっています。

例2:数値のArrayListをint型配列にコピーする

次に、整数値を格納したArrayListをint[]型の配列にコピーする例を見てみましょう。

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      ArrayList list = new ArrayList();
      list.Add(100);
      list.Add(200);
      list.Add(300);
      list.Add(400);
      list.Add(500);
      list.Add(600);
      list.Add(700);
      list.Add(800);
      list.Add(900);
      list.Add(1000);

      int[] intArr = new int[10];

      Console.WriteLine("ArrayList...");
      foreach(Object obj in list)
         Console.WriteLine("{0}", obj);

      // ArrayListの全要素を配列へコピー
      list.CopyTo(intArr);

      Console.WriteLine("\nArrayListからコピー後のInteger配列...");
      foreach(Object ob in intArr)
         Console.WriteLine("{0}", ob);
   }
}

実行結果

ArrayList...
100
200
300
400
500
600
700
800
900
1000

ArrayListからコピー後のInteger配列...
100
200
300
400
500
600
700
800
900
1000

この例では、ArrayListの10個の整数値がすべてintArrに正しくコピーされています。ArrayListの要素数と配列のサイズが一致しているため、余分な空きスペースは発生しません。

CopyToメソッドの主なオーバーロード

CopyToメソッドには、用途に応じて使い分けられる複数のオーバーロードが用意されています。

  • CopyTo(Array):ArrayList全体を配列の先頭からコピーします。
  • CopyTo(Array, Int32):ArrayList全体を、配列内の指定したインデックス位置からコピーします。
  • CopyTo(Int32, Array, Int32, Int32):ArrayList内の指定したインデックスから、指定した要素数だけ、配列の指定した位置へコピーします。

まとめ

ArrayListの内容をまとめて配列に変換したい場合、CopyToメソッドを使えば1行で簡単に処理できます。ただし、コピー先の配列サイズが要素数より小さいとArgumentExceptionが発生するため、事前に十分なサイズを確保しておくことが重要です。また、現代のC#開発では型安全なList<T>ToArray()メソッドの利用が推奨される点も覚えておくとよいでしょう。

  1. MongoDBの配列の先頭に値を追加する方法

    MongoDBの配列の先頭に値を追加する方法MongoDBシェル上で配列の先頭に値を追加したい場合は、JavaScriptのunshift()メソッドを使います。yourArrayName.unshift(yourValue);この構文を実行すると、指定した値が配列の先頭(最初の要素として)に追加されます。それでは、実際に文字列の配列を作成して動作を確認してみましょう。ステップ1:文字列の配列を作成する> technicalSkills=[Java,MySQL,C,SQL SERVER,ORACLE,PL/SQL];実行すると、次のような出力が得られます。[ Java, MySQL, C

  2. C#でディレクトリの内容を丸ごとコピーする方法(サブフォルダ・ファイルも含む)

    ディレクトリの内容全体をコピーする場合、最も重要なのはサブディレクトリ(サブフォルダ)やその中に関連するファイルも含めて確実にコピーすることです。C#ではDirectoryInfoクラスと再帰処理を組み合わせることで、これをシンプルに実現できます。 例:コピー元とコピー先の準備 まず、以下のようにサブディレクトリとファイルを含むデモ用のソースディレクトリ(コピー元)を想定します。   一方、コピー先(ターゲット)となるディレクトリは、初期状態では空であるとします。 サンプルコード 以下のコードでは、CopyAllメソッドを定義し、ファイルのコピーとサブディレクトリの再帰的なコピ